【发布时间】:2014-05-28 15:56:05
【问题描述】:
当我尝试更新我的一个模型的记录时,我只得到了ActiveRecord::TransactionIsolationConflict 错误。重试没有帮助。
我该怎么办?
Rails 3.2.13
红宝石 1.9.3
【问题讨论】:
标签: ruby-on-rails-3 rails-activerecord
当我尝试更新我的一个模型的记录时,我只得到了ActiveRecord::TransactionIsolationConflict 错误。重试没有帮助。
我该怎么办?
Rails 3.2.13
红宝石 1.9.3
【问题讨论】:
标签: ruby-on-rails-3 rails-activerecord
在我的例子中,有许多孤立的进程在有问题的表上持有锁。不知何故,启动它们的应用程序断开了连接,但锁仍然存在。以下说明摘自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
【讨论】: