 然后語句執行計劃圖如下:
然后語句執行計劃圖如下: 查看申請了哪些鎖為了得到查詢會申請哪些鎖,通過如下這條查詢就可以得到
查看申請了哪些鎖為了得到查詢會申請哪些鎖,通過如下這條查詢就可以得到begin tran select cont2 from testklup with(HOLDLOCK) where nlskey=1
在默認的事務隔離級別下,開啟事務,然后查詢中使用HOLDLOCK提示。HOLDLOCK將共享鎖保留到事務完成,而不是在相應的表、行或數據頁不再需要時就立即釋放鎖。
然后使用DMV視圖sys.dm_tran_locks來查看持有鎖的情況,查詢結果如下:

 從上圖可以得出如下信息:1) 非聚集索引申請的S鎖需等到鍵查找在聚集索引上查找完畢后才釋放。這其實也是鍵查找導致死鎖發生的條件2)鎖申請和釋放的順序有點類似于進棧和出棧,先申請的最后釋放3)疑問:為什么沒有鍵查找在聚集索引Key上申請的S鎖記錄呢?鎖肯定是有,但不清楚為什么Profiler沒有記錄到,因為我跟蹤查詢加HOLD時,是會在最后申請一個S鎖的,結果如下:
從上圖可以得出如下信息:1) 非聚集索引申請的S鎖需等到鍵查找在聚集索引上查找完畢后才釋放。這其實也是鍵查找導致死鎖發生的條件2)鎖申請和釋放的順序有點類似于進棧和出棧,先申請的最后釋放3)疑問:為什么沒有鍵查找在聚集索引Key上申請的S鎖記錄呢?鎖肯定是有,但不清楚為什么Profiler沒有記錄到,因為我跟蹤查詢加HOLD時,是會在最后申請一個S鎖的,結果如下: 小結通過本文,我們知道了一個簡單的鍵查找查詢會申請哪些鎖,同時,鎖申請和釋放的順序是怎樣的。在非聚集索引上申請的鎖一直到鍵查找執行完畢才會釋放如有不對的地方,歡迎拍磚,謝謝!O(∩_∩)O
小結通過本文,我們知道了一個簡單的鍵查找查詢會申請哪些鎖,同時,鎖申請和釋放的順序是怎樣的。在非聚集索引上申請的鎖一直到鍵查找執行完畢才會釋放如有不對的地方,歡迎拍磚,謝謝!O(∩_∩)O新聞熱點
疑難解答