ホームページ > データベース > mysql チュートリアル > オンライン ユーザー テーブルでの MySQL デッドロックを効果的に回避するにはどうすればよいですか?

オンライン ユーザー テーブルでの MySQL デッドロックを効果的に回避するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-27 05:29:13
オリジナル
130 人が閲覧しました

How Can I Effectively Avoid MySQL Deadlocks in an Online User Table?

オンライン ユーザーのテーブルでの MySQL デッドロックの回避

「ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してください」エラーの発生イライラする問題になる可能性があります。このようなデッドロックは、複数のトランザクションが競合する順序でリソースのロックを取得しようとすると発生します。この問題に対処するには、次の解決策を検討してください。

並べ替え操作

デッドロックは、キーを異なる順序でロックしようとする操作が原因で発生することがよくあります。それに応じてクエリを並べ替えることにより、キーをロックする一貫した順序を確立します。たとえば、key(1) と key(2) の両方をロックする複数のクエリがある場合は、常に同じ順序でロックを取得するようにしてください。

Order DELETE Query

DELETE クエリも昇順で動作するように変更する必要があります。次の最適化されたクエリはこれを実現します。

DELETE FROM onlineusers 
WHERE id IN (
    SELECT id FROM onlineusers
    WHERE datetime < NOW() - INTERVAL 900 SECOND 
    ORDER BY id
) u;
ログイン後にコピー

クライアントの自動再試行

MySQL ドキュメントでは、デッドロックに対するクライアントの自動再試行を推奨しています。このロジックをクライアント コードに実装し、諦める前に特定の再試行回数 (例: 3) を設定します。

以上がオンライン ユーザー テーブルでの MySQL デッドロックを効果的に回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート