我在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 ...
无法确定,但是这里有一些想法...
其背后的主要原因是事务太长且涉及太多对象的事实。