我最近发现我们的ERP软件在我们的MS SQL数据库中造成了很多死锁。 对我来说,我们应该始终避免陷入僵局。如果我们有一个,我们应该追踪它以了解原因并做出改变以消除它们。
但软件提供商说它就像设计一样:
1-新记录插入表A中,以便进行处理。
2-我们有2台JBoss服务器,监控同一个表以获取新记录。 只要有一台服务器可用,它就会处理记录和 然后删除/修改记录为已处理。
3-当然,如果2 服务器可用会导致死锁。
4-最后,自从其中一个JBoss以来,该应用程序不是问题 服务器将成功完成该过程。基于此, 软件供应商说死锁不是问题。
这导致每天约50到100个死锁。 让所有这些交易都发生好了吗? (因为确定了原因) 如果没有,我希望你们有充分的理由要求他们修改他们的软件过程。
由于
答案 0 :(得分:0)
如果轮询的逻辑是这样的话,我会遇到种子死锁:
select top 1 @ID = ID from QUEUE where STATUS = 0
update QUEUE set STATUS = 1 where ID = @ID
这会导致死锁,因为有时这两个作业会在另一个作业能够更新之前获取相同的ID。
使用查询提示或在一个语句中执行update + select,可以非常轻松地修复此问题。如果您不知道哪种查询实际导致了死锁,那么这可能没什么帮助。