本例中使用begin tran和with (holdlock)提示來觀察SQL Server在select語句中的鎖。 開啟事務是為了保證時間極短的查詢也能觀察到鎖情況,因為holdlock會在事務結束後釋放鎖。 本例中使用begin tran和with (holdlock)提示來觀察SQL Ser ...
本例中使用begin tran和with (holdlock)提示來觀察SQL Server在select語句中的鎖。 開啟事務是為了保證時間極短的查詢也能觀察到鎖情況,因為holdlock會在事務結束後釋放鎖。 insert語句: 其上鎖情況為: insert語句會對錶上的所有索引作出更新,因此這裡看到的索引列較多,我們先把所有的索引搞出來看看: 可以看到所有索引都涉及到了,然後我們來仔細分析下加鎖情況: 1.表1717581157添加了表級的IX鎖,這裡objid為41查出來的是NULL表名,不做討論。 2.用dbcc page查看一下涉及到的所有頁的類型: 1:640,非聚集索引頁 1:5280,非聚集索引頁 1:27216,非聚集索引頁 1:22872,非聚集索引頁 1:32048,非聚集索引頁 1:50160,非聚集索引頁 1:1449368,非聚集索引頁 1:1461146,數據頁(在聚簇表中也叫聚集索引葉子頁) 可以看到每個X模式的KEY鎖都對應一個IX鎖,形成了8個KEY/PAGE鎖對兒。這是因為更新每個索引記錄都要在其頁上加IX頁鎖。在這8個鎖對兒中7個是非聚集索引的鎖,1個是聚集索引的鎖。