MySQL の「ロック待機タイムアウトを超過しました」エラーを解決する
MySQL で「ロック待機タイムアウトを超えました。トランザクションを再起動してください」エラーが発生することは、トランザクションを明示的に使用していない場合でも、いくつかの潜在的な原因がある一般的な問題です。
よくある原因の 1 つは、別のプロセスによって保持されているテーブル ロックです。ロックされたテーブルを特定するには、次のコマンドを使用します:
<code class="language-sql">SHOW OPEN TABLES WHERE In_use > 0;</code>
このクエリは、現在ロックされているテーブルを明らかにします。 ターゲット テーブルが表示された場合、次のステップは、以下を使用して責任のあるプロセスを見つけることです:
<code class="language-sql">SHOW PROCESSLIST;</code>
アクティブなプロセスが表示されます。テーブルをロックしているプロセス ID (PID) を見つけて、次のコマンドで終了します。
<code class="language-sql">KILL <process_id>;</code>
もう 1 つのシナリオには、暗黙的なトランザクションが含まれます。 以下を使用してこれらを確認してください:
<code class="language-sql">SELECT @@INNODB_TRX_ID;</code>
ゼロ以外の結果は、アクティブな暗黙的なトランザクションを示します。 次のコマンドを使用してコミットを強制します:
<code class="language-sql">COMMIT;</code>
これらの手順が失敗した場合は、MySQL サーバーを再起動するか、テーブルを最適化することが必要な解決策となる可能性があります。 テーブルの最適化は、特定の MySQL バージョンとニーズに応じてさまざまなコマンドを使用して実現できます。
以上がトランザクションがないにもかかわらず「ロック待機タイムアウトを超過しました」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。