我想使用SQL Server事件探查器来识别死锁的原因。 这里的僵局图: 两个陈述都是插入其次是select scope_identity();
其实一个有2个并发流程,反复做嵌入select_identity在一个周期。SQL服务器事件探查器中的死锁图显示相同的集群密钥上的相互锁
我希望那是什么插入采取排它锁在聚集索引和选择采取非聚集索引的共享锁,然后他们等待对方释放它们各自的的indeces。
我看到的是两个进程等待释放相同的资源 - 聚集索引。怎么会这样?特别追索权应属于一个进程或另一进程。我在这里想念什么?感谢所有提前。
编辑:是的,隔离级别是Serializible。 PS:也许,我的关于非聚集索引的共享锁的假设是错误的,只要我的选择不包含where
声明
EDIT2: 这里是XML的一部分:
<resource-list>
<keylock hobtid="72057594148028416" dbid="29" objectname="<confidential>" indexname="PK_WP_Inbound_StockTransactionLine" id="lock9641700" mode="RangeS-S" associatedObjectId="72057594148028416">
<owner-list>
<owner id="process8e09288" mode="RangeS-S"/>
</owner-list>
<waiter-list>
<waiter id="process991ce08" mode="RangeI-N" requestType="convert"/>
</waiter-list>
</keylock>
<keylock hobtid="72057594148028416" dbid="29" objectname="<confidential>" indexname="PK_WP_Inbound_StockTransactionLine" id="lock9641700" mode="RangeS-S" associatedObjectId="72057594148028416">
<owner-list>
<owner id="process991ce08" mode="RangeS-S"/>
</owner-list>
<waiter-list>
<waiter id="process8e09288" mode="RangeI-N" requestType="convert"/>
</waiter-list>
</keylock>
</resource-list>
据此,我认为这是范围扫描引起的SERIALIZABLE隔离(谷歌搜索引擎)。但是,我不明白这是怎么发生的,建议的补救措施是什么。
你正在使用什么隔离级别?序列化?如果是这样的原因? –
是的,我忘了说,对不起。我编辑了帖子 –
发布死锁XML,而不是图像。图像不完整,误导而且往往是错误的。 –