SQL Server 2008 R2查询通知上的死锁(SqlDependency)

问题描述 投票:2回答:2

我在SQL Server 2008 R2上遇到了死锁问题。在SQL事件探查器中查看死锁图时,问题似乎源于查询通知:

  <resource-list>
   <keylock hobtid="72057654759522304" dbid="6" objectname="MyDB.sys.query_notification_814081939" indexname="cidx" id="lock15ab2aa80" mode="RangeX-X" associatedObjectId="72057654759522304">
    <owner-list>
     <owner id="process5c5708" mode="RangeX-X"/>
    </owner-list>
    <waiter-list>
     <waiter id="process4e9ae08" mode="RangeS-U" requestType="wait"/>
    </waiter-list>
   </keylock>
   <keylock hobtid="72057654759522304" dbid="6" objectname="MyDB.sys.query_notification_814081939" indexname="cidx" id="lock15e56a300" mode="RangeS-U" associatedObjectId="72057654759522304">
    <owner-list>
     <owner id="process4e9ae08" mode="RangeS-U"/>
    </owner-list>
    <waiter-list>
     <waiter id="process5c5708" mode="RangeS-U" requestType="wait"/>
    </waiter-list>
   </keylock>
  </resource-list>

这些查询通知是使用SQLDependency实现的。当更新由SQLDependency监视的表时,似乎正在发生死锁。

我不太了解死锁图的语法。.密钥锁定模式是RangeS-U only while using the serializable transaction isolation level.,对吧?

我也已经阅读过此question ...我应该激活READ_COMMITED_SNAPSHOT吗?

thx ...

c# sql-server-2008 sqldependency
2个回答
2
投票

无法确定,但是这里有一些想法...


0
投票

其背后的主要原因是事务太长且涉及太多对象的事实。

© www.soinside.com 2019 - 2024. All rights reserved.