在Rails中悲观锁定with_lock

在我们的Rails应用程序中,我们有一个模型Person,并且mysql数据库中的相应表具有大约一百万条记录。我们在控制器update_status中有一个针对特定属性status的方法。我们收到有关此模型的许多更新HTTP请求。本质上,这是高度事务性的,有时我们会在一秒钟之内获得特定记录的多个更新。我们从日志中注意到一些mysql超时。

我的理论是由于特定记录的第二秒内发生了太多更新,导致mysql死锁。作为解决方案,我计划在进行如下更新时使用with_lock:

def update_status
  @person_object.with_lock do
     @person.update_attribute(:status,params[:status])
  end
  render response
end

以前我们没有锁,现在我要介绍这个with_lock来处理此问题。考虑到流量很高,这将带来什么样的性能影响?尽管我知道with_lock确实row-level locking会做,但是我不确定是否一定要注意此更改可能引起的其他影响。即使不是由deadlock引起的,在这样频繁更新的方法/列上使用这样的锁也是一种好习惯。寻找您的输入。谢谢。

mingjiang2009 回答:在Rails中悲观锁定with_lock

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3136407.html

大家都在问