MySQL で「ロックを取得しようとしたときに見つかったデッドロック」を回避する
問題:
開発者は断続的な「ロックを取得しようとしたときにデッドロックが見つかりました。オンライン ユーザー アクティビティを追跡する InnoDB テーブルに INSERT を実行すると、トランザクションを再開してくださいというエラーが発生します。テーブルはページの更新時に更新され、cron ジョブによって 15 分ごとにクリアされます。
問題のクエリ:
解決策:
デッドロックを解決するには、トランザクションが一貫した順序でキーをロックすることが重要です。推奨される手順は次のとおりです:
クエリ内のキーの順序:
Sort Delete ステートメント:
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND ORDER BY id ) u;
再試行メカニズム:
以上がMySQL オンライン ユーザー追跡システムで「ロックを取得しようとしているときにデッドロックが見つかりました」エラーを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。