mysqlロック待機タイムアウトが超過しました。トランザクションを再開してみてください


26

私たちは、長年にわたって実行されているJavaアプリケーションを実行しています。バックエンドはMySQLです。最近、mysql 5.6に更新されました。すべてが正常に実行され、先週はこのエラーが発生し始めました。ロック待機タイムアウトが超過しました。終了を停止しないように見えるトランザクションを再起動してみてください。このエラーを停止するにはどうすればよいかわかりません。突然それが起こっている理由

回答:


29

ロック時間の変数innodb_lock_wait_timeout = 100を100秒に設定できます。

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

タイムアウトしているトランザクションは、別のプロセスが保持しているテーブルをロックしようとします。タイムアウト変数は、わずかな秒数で設定されます。そのため、エラーが表示されます。コマンドでさらにステータスを見ることができます。

SHOW ENGINE INNODB STATUS\G 

ロックされたテーブルのリストを表示するには、

 show open tables where in_use>0;

このテーブルを使用しているスレッドを見てください

  show full processlist;

これで、そのスレッドを強制終了するか、完了するまで待つことができます。



この情報に感謝しますが、小さな更新(1つのフィールドのインクリメントや更新など)が非常に単純なテーブルであっても、ロックが発生し続けると、どのようにして問題の根本に達することができますか。
Wouter

-1

5.0より前のMySQLバージョンを使用している場合、セッションまたはグローバルスコープであっても変数を変更できません。最適なソリューションは、クエリをキャプチャし、トラフィックが遅くなった後に実行することです。


2
OPは5.6を使用していると言いますが、これは5.0以上です。
RDFozz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.