分区会解决我的死锁问题

时间:2011-10-24 21:17:30

标签: sql-server-2005 database-partitioning

我有一个更新SQL Server 2005数据库中的表的应用程序。该应用程序为我的每个区域都有一个线程,这些线程同时运行。

在极少数情况下,我在更新表时遇到SQL Server死锁错误。

最近我想到我应该按地区划分我的桌子。在我看来,问题应该消失,但我不能在我的测试环境中复制这个错误,所以我无法证明它。

有没有人对此有任何想法?

2 个答案:

答案 0 :(得分:1)

您需要深入研究锁定的内容以及原因 - 锁是否从行锁升级到页/表锁,或者这是行锁之间的死锁。

从区域性来看,锁定升级可能会以某种方式发挥作用,来自您的帖子的推断是您不希望2个线程接触相同的记录 - 但这并不能阻止他们编辑相同的数据页/表。

就SQL Server 2005而言,锁升级来自行 - >页面 - >表。仅在SQL Server 2008中,分区锁才会进入该升级。

您需要深入了解死锁并捕获死锁图,以了解更多关于遇到死锁的信息。有关MSDN图表的更多信息:http://msdn.microsoft.com/en-us/library/ms188246(v=SQL.90).aspx

答案 1 :(得分:1)

如果没有线程会更新同一行,那么您应该使用with rowlock提示。如果您已经在使用此提示,则问题是由标准死锁之外的其他问题引起的。 (除了死锁之外的其他事情导致代码运行得如此之慢,引擎会使用死锁消息杀死线程。)