1. ホーム
  2. mysql

[解決済み] Mysql テーブルの "Lock wait timeout exceeded; try restarting transaction" を修正する?

2022-04-28 06:03:27

質問

スクリプトから、このようなクエリをローカルデータベースに何千回も送りました。

update some_table set some_column = some_value

Whereの部分を追加するのを忘れたので、テーブルのすべての行で同じカラムに同じ値が設定され、これが何千回も行われ、カラムはインデックスされていたので、対応するインデックスもおそらく何回も更新されたでしょう。

あまりに時間がかかるので、何かおかしいと思い、スクリプトを終了させました。それ以来、コンピュータを再起動したりもしましたが、何かがテーブルで止まっています。単純なクエリの実行に非常に長い時間がかかるため、関連するインデックスを削除しようとすると、このメッセージが出て失敗します。

Lock wait timeout exceeded; try restarting transaction

innodbのテーブルなので、おそらく暗黙のうちにトランザクションがスタックしているのでしょう。どうすればこのテーブルを修正し、そこからスタックしたトランザクションを取り除くことができるでしょうか?

解決方法は?

テーブルを削除し、バックアップから復元することで問題を解決しました。