突然(関連するコードを変更せずに)、次のようなアクティブレコードを介してロックエラーが発生します。
ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded;
try restarting transaction: UPDATE `items` SET `state` = 'reserved', `updated_at` = '2012-09-15 17:58:21' WHERE `items`.`id` = 248220
と
ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded;
try restarting transaction: DELETE FROM `sessions` WHERE `sessions`.`id` = 41997883
これらのモデルのいずれでも独自のトランザクションを実行していないため、トランザクションは組み込みのRailsトランザクションのみです。トラフィックやリクエストの量は急増していません。
これらのエラーは、「新しい」クエリがロックされたテーブルで実行しようとして待機する必要がある場合に発生するようです。待機しているものをどのように確認できますか?コードのどの部分がテーブルを長期間ロックするクエリを発行しているのかをどのように把握しますか?
私たちがどこを見ることができるか、またはこれの原因を調査する方法についてのアイデアはありますか?