オンライン ユーザーのテーブルでの 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 サイトの他の関連記事を参照してください。