MySQL でデッドロックを回避する方法
デッドロックはデータベース システムでよくある問題であり、重大なパフォーマンスの問題を引き起こす可能性があります。 MySQL では、2 つ以上のスレッドが同じリソースを逆の順序でロックしようとすると、デッドロックが発生します。
デッドロックについて
典型的なデッドロック シナリオを分析してみましょう:
両方の接続の場合同時に実行すると、両方がお互いにロックされたキーを解放するのを待つため、デッドロックが発生します。
回避デッドロック
デッドロックを防ぐには、接続がキーを同じ順序でロックすることが重要です。
クエリの並べ替え
例
特定のケースでは、DELETE ステートメントを次のように変更する必要があります。
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND ORDER BY id ) u;
このサブクエリのアプローチを使用すると、DELETE 操作は ID 列の昇順で行をロックし、
クライアント側の再試行ロジック
システムでまだデッドロックが発生する場合は、クライアント側の再試行ロジックを実装することをお勧めします。これには、デッドロック エラーが発生した場合に、クライアントが自動的に操作を複数回 (たとえば、3 回) 再試行することが含まれます。
以上がMySQL でのデッドロックを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。