【问题标题】:How to resolve? ActiveRecord::TransactionIsolationConflict如何解决? ActiveRecord::TransactionIsolationConflict
【发布时间】:2014-05-28 15:56:05
【问题描述】:

当我尝试更新我的一个模型的记录时,我只得到了ActiveRecord::TransactionIsolationConflict 错误。重试没有帮助。

我该怎么办?

Rails 3.2.13
红宝石 1.9.3

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多