突然之间(没有对相关代码进行任何更改),我们通过活动记录收到锁定错误,例如:
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 交易。流量或请求量没有激增。
这些错误似乎是当“新”查询尝试在锁定的表上运行并且必须等待时,我们如何看到它在等待什么?我们如何确定代码的哪一部分正在发出长时间锁定表的查询?
关于我们可以在哪里查看或如何调查其原因的任何想法?