「MySQL でロック待機タイムアウトを超過しました」をデバッグするには?
エラー ログでは、「ロック待機タイムアウトを超過しました」エラーが発生すると、クエリが InnoDB テーブル内のデータを変更しようとして、ロックの競合が発生しました。この問題をデバッグするには、次の手順に従います。
-
クエリを特定する: エラー時に実行されていたクエリを確認して、ロック タイムアウトの原因となっているクエリを特定します。 .
-
関係するテーブルを見つけます: ロックはInnoDB のテーブル レベルで適用され、クエリによってアクセスされているテーブルを特定します。
-
ロック情報の取得: 保持されているロックに関する詳細情報を収集するには、 「SHOW ENGINE INNODB STATUSG」コマンド。
-
ロック ステータスの分析:コマンドの出力で、ロックの影響を受けるテーブルを示す「LOCK」セクションを検索します。ロック プロセスに関係するスレッド、保持されている特定のロック、およびロックを取得したトランザクションに関する情報が表示されます。
-
ロックの競合を解決:影響を受けるテーブルとロック競合の性質を特定したら、次の 2 つのオプションがあります:
- ロック待機時間を増やすタイムアウト: innodb_lock_wait_timeout 構成変数を増やして、ロック解決にさらに多くの時間を与えます。これは、要件に基づいて一時的または永続的に実行できます。
- ブロックしているクエリを特定して強制終了: ロックの競合が、長時間実行されているトランザクションやデッドロックなどの問題のあるクエリによって引き起こされている場合は、次のことが必要になる場合があります。ブロックしているクエリを特定して強制終了し、ロックを解放します。 「pt-kill」などのツールを使用して、特定のプロセスを終了できます。
以上がMySQL での「ロック待機タイムアウトを超えました」エラーのトラブルシューティング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。