web-dev-qa-db-ja.com

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

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

28
JAVAC

ロック時間の変数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;

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

32
Hitesh Mundra