1. ホーム
  2. マイスル

[解決済み】トランザクションを使用していないのに「ロック待ちのタイムアウトを超えましたので、トランザクションを再起動してください」と表示される

2022-03-25 08:40:32

質問

次のようなMySQLを実行しています。 UPDATE ステートメントを使用します。

mysql> update customer set account_import_id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

トランザクションを使用していないのに、なぜこのようなエラーが発生するのでしょうか?MySQLサーバーの再起動も試しましたが、解決しませんでした。

テーブルには 406,733 行があります。

解決方法は?

トランザクションを使用しています。オートコミットはトランザクションを無効にするのではなく、ステートメントの最後で自動的にコミットするようにするだけです。

何が起こっているかというと、他のスレッドがあるレコード(あなたはテーブルのすべてのレコードを更新しています!)に対してレコードロックを長く保持しており、あなたのスレッドがタイムアウトしているのです。

を発行することで、イベントの詳細を確認することができます。

SHOW ENGINE INNODB STATUS

の後に(SQLエディタで)表示します。理想的には、静かなテストマシンでこれを行います。