ORM支持处理死锁

Otá*_*cio 7 orm deadlock

你知道任何提供死锁恢复的ORM工具吗?我知道死锁是一件坏事,但有时任何系统都会受到负载的影响.在Sql Server中,死锁消息显示"重新运行事务",因此我怀疑重新运行死锁语句是ORM的理想功能.

rea*_*idt 4

我不知道有什么特殊的 ORM 工具支持自动重新运行因死锁而失败的事务。然而,我不认为 ORM 使得处理锁定/死锁问题有很大不同。首先,您应该分析死锁的根本原因,然后以避免或至少减少死锁的方式重新设计事务和查询。有很多改进选项,例如为事务(部分)选择正确的隔离级别、使用锁定提示等。这更多地取决于您的数据库系统,而不是 ORM。当然,如果您的 ORM 允许您使用存储过程来执行某些微调命令等,这会有所帮助。

如果这不能帮助完全避免死锁,或者您现在没有时间实施和测试真正的修复,当然您可以简单地在保存/提交/持久或任何调用周围放置一个 try/catch,请检查如果异常表明失败的事务是“死锁受害者”,则捕获异常,然后在休眠几秒钟后简单地调用保存/提交/持久。等待几秒钟是一个好主意,因为死锁通常表明存在竞争相同资源的事务的临时高峰,并且一次又一次快速地重新运行相同的事务可能会使情况变得更糟。

出于同样的原因,您可能不会确保只尝试一次重新运行同一事务。

在现实世界中,我们曾经实施过这种解决方法,大约 80% 的“死锁受害者”在第二次成功。但我强烈建议深入挖掘以解决死锁的实际原因,因为这些问题通常随着用户数量呈指数级增长。希望有帮助。