我想使用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,而不是圖像。圖像不完整,誤導而且往往是錯誤的。 –