死鎖的奇怪的地方:死鎖設計到的表示heap表,但是對key發生死鎖,但是對key進行等待,死鎖設計到的hotbid,無法再sys.partitions查詢到objectid(這個誤判是我們有索引的重建,導緻hotbid變化,無法再表中查找到)
問題是出現在一個非聚集索引上,這個索引是key是uame,是走索引的,為什麼和insert死鎖呢
線索:表中delete的where 字段,參數化傳進來使用的是nvarchar,但是表中卻是使用varchar
死鎖資訊:
原因:
目前還沒找到原因但是估計和nvarchar 和 varchar 的隐式類型轉化有關
大概問題我已經發現了,雖然delete 是走索引的,但是在計劃上發現GetRangeThroughConvert 對類型進行轉化,轉後後,出來3個計算标量,
然後再索引查找的時候對最小的,最大的标量進行 查找 就是 标量1<uame<标量3,這樣導緻delete 查找的範圍擴大,導緻和insert之間的鎖請求沖突
其他資料:
資料包括:表結構,和delete 的執行計劃,如果有興趣研究在資料方面我會盡力,按需求補全
涉及到公司的一些表結構,不友善在公共場合透露,如果有朋友需要可以發我的郵箱索取,我的郵箱: [email protected]