为什么Microsoft SQL Server会在以前从未有过为一个表抛出死锁异常?

时间:2013-02-21 18:47:27

标签: sql-server

几天后,我们开始在我们的某个应用程序中频繁抛出异常。这些都是以下形式:

Exception : com.microsoft.sqlserver.jdbc.SQLServerException: 
Transaction (Process ID 66) was deadlocked on lock resources with 
another process and has been chosen as the deadlock victim. 
Rerun the transaction.

一些有趣的事实:

  • 这些例外都发生在单个表上的特定更新中。
  • 由于系统中发生的事情,通常会在不同的线程中基本上同时触发一大堆这些更新。但是,只要系统一直在运行,这种行为从来没有引起过问题(据我所知,并且我们知道,异常会使日志显着混乱),SQL Server已经以排队的方式正确处理了这个问题。没有锁定问题。
  • 同时对其他表进行大量其他更新查询,创建相同的情况,但不会导致问题。
  • 这是SQL Server 2005
  • 声称服务器,数据库,架构或表配置没有任何变化。

然而,我怀疑最后的说法是否属实。关于服务器配置可以改变哪些内容会改变服务器处理同步更新的方式?

1 个答案:

答案 0 :(得分:1)

如果表格变得碎片化或统计数据随着时间的推移变得陈旧,可能会发生这样的事情。是否有人放弃了索引?另请参阅Proactive Deadlock Notifications以了解在发生死锁时如何获得通知