Sql-Server
用於在 SQL Server 中的聚集索引上生成頁面鎖的範例查詢/DDL(無提示)
我們目前有一些
ALLOW_PAGELOCKS
設置為關閉的索引。這大概是為了減少死鎖。但是我懷疑它是否真的會在當時產生影響。現在我試圖了解 SQL Server 何時實際選擇開始鎖定頁面而不是聚集索引中的鍵。我最近問過 Jonathan Keyhaisas,他告訴我,如果我在隨後的幾頁上觸摸行,就會發生這種情況。但是,我沒有通過使用範例查詢更新聚集索引中的行來獲得任何獨占頁面鎖。
您能否通過範例查詢和表格幫助我更好地理解頁面鎖?我正在執行 SQL Server 2008 SP4。
提前致謝
馬丁
我們可以使用一個大小差不多的表,但是我們需要一些更有趣的數據。具體來說,SQL 沒有索引但我們在修改謂詞中使用的數據。
USE tempdb; CREATE TABLE dbo.Dummy ( Id INT IDENTITY(1, 1), Crap DATE, MoreCrap VARCHAR(1000) ); INSERT dbo.Dummy ( Crap, MoreCrap ) SELECT TOP 1000000 DATEADD(DAY, x.Rn % 365 + 1, GETDATE()), CONVERT(VARCHAR(100), NEWID()) FROM ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Rn FROM sys.messages AS m CROSS JOIN sys.messages AS m2 ) AS x ( Rn ); CREATE CLUSTERED INDEX cx_RemusForPresident ON dbo.Dummy (Id)
僅使用 Id 列上的 CX,我們進行更新!
BEGIN TRAN UPDATE d SET d.MoreCrap = 'Happy Friday' FROM dbo.Dummy AS d WHERE d.Crap >= '20170601' AND d.Crap < '20170630' AND d.MoreCrap LIKE '0%'
和以前一樣,雖然希望不會冒犯 Aaron Bertrand,但我們檢查了sp_WhoIsActive
EXEC sp_WhoIsActive @get_locks = 1
和布拉莫!Pages 上的獨占鎖和對像上的 IX 鎖,沒有鍵鎖。