自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

數(shù)據(jù)庫 SQL Server
最近看了高兄的一篇文章,SQL Server高頻,高并發(fā)訪問中的鍵查找死鎖解析,很有收獲,里面講到了鍵查找引起的死鎖問題。

 當然看的過程中,其實自己有個疑問:

對于鍵查找這類查詢,會申請哪些鎖,鎖申請和釋放的順序是怎樣的?

準備

備注:測試表仍然使用高兄文中創(chuàng)建的測試表testklup

在開始之前,使用dbcc ind 命令先看下測試表的數(shù)據(jù)組織情況

然后語句執(zhí)行計劃圖如下:

查看申請了哪些鎖

為了得到查詢會申請哪些鎖,通過如下這條查詢就可以得到

  1. begin tran  
  2. select cont2 from testklup with(HOLDLOCK) where nlskey=1 

 

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

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

從查詢結(jié)果,可以得出申請了如下的鎖:

1)在表object上申請了IS鎖

2)在非聚集索引PAGE上申請了IS鎖

3)在非聚集索引KEY上申請了S鎖

4)在聚集索引的PAGE上申請了IS鎖

5)在聚集索引的KEY上申請了S鎖

查看鎖申請和釋放的順序

我們使用SQL Profiler來跟蹤鎖申請和釋放的事件。模板選擇TSQL-LOCKS,只跟蹤運行語句的會話spid,同時事件增加Lock:Acquired和Lock:Released。執(zhí)行查詢跟蹤結(jié)果如下:

 

從上圖可以得出如下信息:

1) 非聚集索引申請的S鎖需等到鍵查找在聚集索引上查找完畢后才釋放。這其實也是鍵查找導致死鎖發(fā)生的條件

2)鎖申請和釋放的順序有點類似于進棧和出棧,先申請的***釋放

3)疑問:為什么沒有鍵查找在聚集索引Key上申請的S鎖記錄呢?鎖肯定是有,但不清楚為什么Profiler沒有記錄到,因為我跟蹤查詢加HOLD時,是會在***申請一個S鎖的,結(jié)果如下:

小結(jié)

通過本文,我們知道了一個簡單的鍵查找查詢會申請哪些鎖,同時,鎖申請和釋放的順序是怎樣的。在非聚集索引上申請的鎖一直到鍵查找執(zhí)行完畢才會釋放。

原文鏈接:http://www.cnblogs.com/JentleWang/p/3911167.html

責任編輯:彭凡 來源: 博客園
相關(guān)推薦

2010-10-21 14:54:32

查詢SQL Serve

2010-09-25 11:50:47

sql server外

2011-09-08 16:30:59

SQL Server查詢

2010-10-21 10:28:13

SQL Server查

2010-09-13 13:58:29

sql server外

2010-11-09 11:40:14

SQL Server查

2023-08-02 10:58:18

SP_WHOSQL Server

2010-11-09 13:58:03

SQL Server鎖

2010-06-29 17:17:44

SQL Server鎖

2010-09-26 16:44:51

SQL子查詢

2010-09-26 16:39:27

SQL子查詢

2010-06-29 17:52:02

SQL Server嵌

2010-11-09 13:47:17

SQL Server資

2023-08-15 08:26:34

SQL Server查找死鎖

2019-11-06 09:30:35

SQL查詢語句數(shù)據(jù)庫

2010-06-29 17:32:13

SQL Server鎖

2021-01-19 05:39:17

SQLServer變量

2022-08-02 08:00:49

sleepwait釋放鎖

2020-07-22 08:06:46

釋放鎖synchronize線程

2010-10-21 10:42:30

SQL Server查
點贊
收藏

51CTO技術(shù)棧公眾號