国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQLServer 查詢使用鍵查找時鎖申請及釋放順序

2024-07-21 02:49:28
字體:
來源:轉載
供稿:網友
SQLServer 查詢使用鍵查找時鎖申請及釋放順序 2014-08-14 09:14 by JentleWang, ... 閱讀, ... 評論, 收藏, 編輯 最近看了高兄的一篇文章,Sql Server 高頻,高并發訪問中的鍵查找死鎖解析,很有收獲,里面講到了鍵查找引起的死鎖問題。當然看的過程中,其實自己有個疑問:對于鍵查找這類查詢,會申請哪些鎖,鎖申請和釋放的順序是怎樣的?準備備注:測試表仍然使用高兄文中創建的測試表testklup在開始之前,使用dbcc ind 命令先看下測試表的數據組織情況然后語句執行計劃圖如下:查看申請了哪些鎖為了得到查詢會申請哪些鎖,通過如下這條查詢就可以得到
begin tran select cont2 from testklup with(HOLDLOCK) where nlskey=1

在默認的事務隔離級別下,開啟事務,然后查詢中使用HOLDLOCK提示。HOLDLOCK將共享鎖保留到事務完成,而不是在相應的表、行或數據頁不再需要時就立即釋放鎖。

然后使用DMV視圖sys.dm_tran_locks來查看持有鎖的情況,查詢結果如下:

從查詢結果,可以得出申請了如下的鎖:1)在表object上申請了IS鎖2)在非聚集索引PAGE上申請了IS鎖3)在非聚集索引KEY上申請了S鎖4)在聚集索引的PAGE上申請了IS鎖5)在聚集索引的KEY上申請了S鎖查看鎖申請和釋放的順序我們使用SQL PRofiler來跟蹤鎖申請和釋放的事件。備注:也可以在執行語句前,開啟1200跟蹤標記,使用語句dbcc traceon(1200,-1) (感謝CareySon)模板選擇TSQL-LOCKS,只跟蹤運行語句的會話spid,同時事件增加Lock:Acquired和Lock:Released。執行查詢跟蹤結果如下:從上圖可以得出如下信息:1) 非聚集索引申請的S鎖需等到鍵查找在聚集索引上查找完畢后才釋放。這其實也是鍵查找導致死鎖發生的條件2)鎖申請和釋放的順序有點類似于進棧和出棧,先申請的最后釋放3)疑問:為什么沒有鍵查找在聚集索引Key上申請的S鎖記錄呢?鎖肯定是有,但不清楚為什么Profiler沒有記錄到,因為我跟蹤查詢加HOLD時,是會在最后申請一個S鎖的,結果如下:小結通過本文,我們知道了一個簡單的鍵查找查詢會申請哪些鎖,同時,鎖申請和釋放的順序是怎樣的。在非聚集索引上申請的鎖一直到鍵查找執行完畢才會釋放如有不對的地方,歡迎拍磚,謝謝!O(∩_∩)O
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 济阳县| 冀州市| 沂南县| 桐乡市| 竹溪县| 新蔡县| 安徽省| 宜昌市| 简阳市| 东港市| 嘉鱼县| 茶陵县| 枝江市| 阳新县| 禄丰县| 施甸县| 凤庆县| 西充县| 丹江口市| 桃江县| 镇安县| 米脂县| 依安县| 桦川县| 松原市| 略阳县| 高州市| 朔州市| 文昌市| 乌海市| 香格里拉县| 循化| 如东县| 宜城市| 婺源县| 准格尔旗| 张家界市| 游戏| 正安县| 浏阳市| 双柏县|