0

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

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
  • 据称服务器、数据库、模式或表配置没有任何变化。

但是,我怀疑最后一个说法是否属实。关于服务器配置可以改变哪些类型的事情会改变服务器处理同时更新的方式?

4

1 回答 1

1

如果表变得碎片化或统计信息随着时间的推移变得陈旧,就会发生类似的事情。也许有人删除了索引?另请参阅主动死锁通知,了解如何在死锁发生时收到通知

于 2013-02-21T18:52:54.197 回答