怎么解决?的ActiveRecord :: TransactionIsolationConflict

时间:2014-05-28 15:56:06

标签: ruby-on-rails-3 rails-activerecord

当我尝试更新其中一个模型的记录时,我只得到ActiveRecord::TransactionIsolationConflict错误。重试无济于事。

我该怎么办?

Rails 3.2.13
Ruby 1.9.3

1 个答案:

答案 0 :(得分:1)

选项A:搜索表

上的锁定

就我而言,有一些孤立的进程在相关的表上持有锁。不知何故,启动它们的应用程序丢弃了连接,但锁仍然存在。以下说明来自Unlocking tables if thread is lost

检查锁定:

mysql> show open tables where in_use > 0;

如果您不知道哪个会话或进程锁定了表,请查看进程列表,并根据用户或他们访问的数据库识别可能的候选者:

mysql> show processlist;

杀死您知道或怀疑在桌面上锁定的进程:

mysql> kill <process id>;

选项B:增加超时

一个流行的建议是增加innodb_lock_wait_timeout。以下说明来自How to debug Lock wait timeout exceeded on MySQL?

检查你的超时:

mysql> show variables like 'innodb_lock_wait_timeout';

动态更改超时(非持久性):

mysql> SET GLOBAL innodb_lock_wait_timeout = 120; 

更改配置文件中的超时(持久性):

[mysqld]
innodb_lock_wait_timeout=120