当我尝试更新其中一个模型的记录时,我只得到ActiveRecord::TransactionIsolationConflict
错误。重试无济于事。
我该怎么办?
Rails 3.2.13
Ruby 1.9.3
答案 0 :(得分:1)
就我而言,有一些孤立的进程在相关的表上持有锁。不知何故,启动它们的应用程序丢弃了连接,但锁仍然存在。以下说明来自Unlocking tables if thread is lost
检查锁定:
mysql> show open tables where in_use > 0;
如果您不知道哪个会话或进程锁定了表,请查看进程列表,并根据用户或他们访问的数据库识别可能的候选者:
mysql> show processlist;
杀死您知道或怀疑在桌面上锁定的进程:
mysql> kill <process id>;
一个流行的建议是增加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