Внезапно (без каких-либо изменений в связанном коде) мы получаем ошибки блокировки посредством активной записи, например:
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
Мы не делаем собственных транзакций в любой из этих моделей, поэтому единственными транзакциями являются встроенные в рельсы. Не было увеличения объема трафика или объема запросов.
Эти ошибки появляются, когда "новый" запрос пытается работать в заблокированной таблице и должен ждать, как мы видим, чего он ждет? Как мы выясним, какая часть нашего кода выдает запросы, которые блокируют таблицы в течение длительных периодов времени?
Любые идеи о том, где мы можем смотреть или как исследовать причину этого?