Decipher Key เปเบฅเบฐ Page WaitResource เปƒเบ™ deadlocks เปเบฅเบฐ locks

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบšเบฅเบฑเบญเบเบซเบผเบทเป€เบเบฑเบšเบเปเบฒเป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ›เบดเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบ SQL Server เป€เบ›เบฑเบ™เป„เบฅเบเบฐ, เบ—เปˆเบฒเบ™เบˆเบฐเบžเบปเบšเบเบฑเบšเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

waitresource=โ€œเปœเป‰เบฒ: 6:3:70133โ€œ

waitresource=โ€œKEY: 6:72057594041991168 (ce52f92a058c)โ€œ

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบˆเบฐเบกเบตเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบขเบนเปˆเปƒเบ™ XML เบเบฑเบเปƒเบซเบเปˆเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบชเบถเบเบชเบฒ (เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ›เบดเบ”เบ—เป‰เบฒเบเบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบŠเบญเบเบซเบฒเบงเบฑเบ”เบ–เบธเปเบฅเบฐเบŠเบทเปˆเบ”เบฑเบ”เบชเบฐเบ™เบต), เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบฐเป€เบซเบกเบต.

เบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบžเบงเบเบกเบฑเบ™เป„เบ”เป‰.

เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบขเบนเปˆเบšเปˆเบญเบ™เบ•เปˆเบฒเบ‡เป†, เบกเบฑเบ™เบ–เบทเบเปเบˆเบเบขเบฒเบเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™! เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบญเบปเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เป€เบ‚เบปเป‰เบฒเบเบฑเบ™ - เบˆเบฒเบ DBCC PAGE เบซเบฒ hobt_id เปเบฅเบฐเบŸเบฑเบ‡เบŠเบฑเบ™ %%physloc%% เปเบฅเบฐ %%lockres%% เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™.

เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเปเบ–เป‰เบฒเบขเบนเปˆเปƒเบ™ PAGE locks, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เบฅเบฑเบญเบ KEY.

1) waitresource=โ€œPAGE: 6:3:70133โ€ = Database_Id: FileId: PageNumber

เบ–เป‰เบฒเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบฅเปเบ–เป‰เบฒเบขเบนเปˆเปƒเบ™ PAGE lock, SQL Server เบˆเบฐเปƒเบซเป‰เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™เปƒเบซเป‰เบ—เปˆเบฒเบ™.

เบเบฒเบ™เบ—เปเบฒเบฅเบฒเบ โ€œPAGE: 6:3:70133โ€ เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš:

  • database_id = 6
  • data_file_id = 3
  • page_numer = 70133

1.1) เบ–เบญเบ”เบฅเบฐเบซเบฑเบ” database_id

เปƒเบซเป‰เบŠเบญเบเบซเบฒเบŠเบทเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเปƒเบŠเป‰ query:

SELECT 
    name 
FROM sys.databases 
WHERE database_id=6;
GO

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ DB WideWorld เบœเบนเป‰เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ เปƒเบ™ SQL Server เบ‚เบญเบ‡เบ‚เป‰เบญเบ.

1.2) เบŠเบญเบเบซเบฒเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ‚เปเป‰เบกเบนเบ™ - เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆ

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ data_file_id เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบŠเบทเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเป„เบ›เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›, เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเปƒเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™, เบ—เบปเบ”เปเบ—เบ™ data_file_id เปƒเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ™เบตเป‰:

USE WideWorldImporters;
GO
SELECT 
    name, 
    physical_name
FROM sys.database_files
WHERE file_id = 3;
GO

เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ WideWorldImporters เบ™เบตเป‰เปเบกเปˆเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ WWI_UserData เปเบฅเบฐเบ‚เป‰เบญเบเป„เบ”เป‰เป€เบญเบปเบฒเบกเบฑเบ™เบ„เบทเบ™เบกเบฒเป€เบ›เบฑเบ™ C:MSSQLDATAWideWorldImporters_UserData.ndf. (เบญเบธเป‰เบ, เป€เบˆเบปเป‰เบฒเบˆเบฑเบšเบ‚เป‰เบญเบเป€เบญเบปเบฒเป„เบŸเบฅเปŒเปƒเบชเปˆเปƒเบ™เบ”เบดเบชเบเปŒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš! เบšเปเปˆเปเบกเปˆเบ™! เบกเบฑเบ™เบ‡เบธเปˆเบกเบ‡เปˆเบฒเบก).

1.3) เป€เบญเบปเบฒเบŠเบทเปˆเบงเบฑเบ”เบ–เบธเบˆเบฒเบ DBCC PAGE

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบซเบ™เป‰เบฒ #70133 เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ‚เปเป‰เบกเบนเบ™ 3 เป€เบ›เบฑเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ WorldWideImporters. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เป€เบ™เบทเป‰เบญโ€‹เปƒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ™เบตเป‰โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ DBCC PAGE เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹เปเบฅเบฐ trace flag 3604โ€‹.
เบซเบกเบฒเบเป€เบซเบ”: เบ‚เป‰เบญเบเบกเบฑเบเปƒเบŠเป‰ DBCC PAGE เบขเบนเปˆเปƒเบ™เบชเปเบฒเป€เบ™เบปเบฒเบ—เบตเปˆเบ–เบทเบเบŸเบทเป‰เบ™เบŸเบนเบˆเบฒเบเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบšเปˆเบญเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบญเบทเปˆเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™. เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เบ™เบฒเบ‡ เบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™ (เบ›เบฐเบกเบฒเบ™ เบœเบนเป‰เปเบ›เบžเบฒเบชเบฒ - เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบ™เปเบฒเป„เบ›เบชเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก, เปเบ•เปˆเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบ url, เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบ”เบฑเบ”เบŠเบฐเบ™เบตเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡.).

/* This trace flag makes DBCC PAGE output go to our Messages tab
instead of the SQL Server Error Log file */
DBCC TRACEON (3604);
GO
/* DBCC PAGE (DatabaseName, FileNumber, PageNumber, DumpStyle)*/
DBCC PAGE ('WideWorldImporters',3,70133,2);
GO

เป€เบฅเบทเปˆเบญเบ™เบœเปˆเบฒเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ object_id เปเบฅเบฐ index_id.
Decipher Key เปเบฅเบฐ Page WaitResource เปƒเบ™ deadlocks เปเบฅเบฐ locks
เป€เบเบทเบญเบšเปเบฅเป‰เบง! เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบŠเบทเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบฅเบฐเบ”เบฑเบ”เบชเบฐเบ™เบตเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ–เบฒเบก:

USE WideWorldImporters;
GO
SELECT 
    sc.name as schema_name, 
    so.name as object_name, 
    si.name as index_name
FROM sys.objects as so 
JOIN sys.indexes as si on 
    so.object_id=si.object_id
JOIN sys.schemas AS sc on 
    so.schema_id=sc.schema_id
WHERE 
    so.object_id = 94623380
    and si.index_id = 1;
GO

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบฅเปเบ–เป‰เบฒ lock เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบต PK_Sales_OrderLines เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Sales.OrderLines.

เบซเบกเบฒเบเป€เบซเบ”: เปƒเบ™ SQL Server 2014 เปเบฅเบฐเบ•เปเปˆเบกเบฒ, เบŠเบทเปˆเบงเบฑเบ”เบ–เบธเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ DMO sys.dm_db_database_page_allocations เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™. เปเบ•เปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบชเบญเบšเบ–เบฒเบกเบ—เบธเบเป†เบซเบ™เป‰เบฒเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เป€เบŠเบดเปˆเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเปเปˆเป€เบขเบฑเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เปƒเบŠเป‰ DBCC PAGE.

1.4) เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเบšเบฅเบฑเบญเบ?

เปเบฅเป‰เบง, เปเบกเปˆเบ™เปเบฅเป‰เบง. เปเบ•เปˆ...เป€เบˆเบปเป‰เบฒเปเบ™เปˆเปƒเบˆเบšเปเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เปเบ—เป‰เป†?
เบกเบฑเบ™เบŠเป‰เบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ. เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบขเบฑเบ™, เบชเบฐเบ™เบฑเป‰เบ™เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเปˆเบฒเบ™เบกเบฒเบ™เบตเป‰ ... เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš %%physloc%%!

%%physloc%% เปเบกเปˆเบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡ magic เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบ•เบปเบงเบฅเบฐเบšเบธเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบฅเบฒเบเบเบฒเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ %%physloc%% เบžเป‰เบญเบกเบเบฑเบš sys.fn_PhysLocFormatter เปƒเบ™ SQL Server 2008 เปเบฅเบฐเบชเบนเบ‡เบเบงเปˆเบฒ.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบฑเบญเบเบซเบ™เป‰เบฒเปƒเบ™ Sales.OrderLines, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒเบ‚เปเป‰เบกเบนเบ™ #3 เปƒเบ™เบซเบ™เป‰เบฒ #70133, เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ–เบฒเบกเบ™เบตเป‰:

Use WideWorldImporters;
GO
SELECT 
    sys.fn_PhysLocFormatter (%%physloc%%),
    *
FROM Sales.OrderLines (NOLOCK)
WHERE sys.fn_PhysLocFormatter (%%physloc%%) like '(3:70133%'
GO

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒ, เบกเบฑเบ™เบŠเป‰เบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เป‰เบญเบเป†. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบก NOLOCK เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเบกเบตเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบšเบดเปˆเบ‡เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบฑเบญเบเป„เบ”เป‰เบ–เบทเบเบเบงเบ”เบžเบปเบš - เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบ›เบทเป‰เบญเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบž.
เปเบ•เปˆ, hurray, เบ„เปเบฒเบ–เบฒเบกเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เป‰เบญเบ 25 เปเบ–เบงเบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ•เปเปˆเบชเบนเป‰เบเบฑเบš
Decipher Key เปเบฅเบฐ Page WaitResource เปƒเบ™ deadlocks เปเบฅเบฐ locks
เบžเบฝเบ‡เบžเปเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบฑเบญเบ PAGE. เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบฅเปเบ–เป‰เบฒเบฅเบฑเบญเบเบเบฐเปเบˆ?

2) waitresource=โ€œKEY: 6:72057594041991168 (ce52f92a058c)โ€ = Database_Id, HOBT_Id (hash magic เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ %%lockres%% เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบ—เป‰เป†)

เบ–เป‰เบฒเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบฅเบฑเบญเบเบšเบฑเบ™เบ—เบถเบเปƒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเปเบฅเบฐเบ–เบทเบเบฅเบฑเบญเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡, เบ—เปˆเบฒเบ™เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”.
เปเบเบ โ€œ6:72057594041991168 (ce52f92a058c)โ€ เบญเบญเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš:

  • database_id = 6
  • hobt_id = 72057594041991168
  • magic hash = (ce52f92a058c)

2.1) เบ–เบญเบ”เบฅเบฐเบซเบฑเบ” database_id

เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡! เบŠเบญเบเบซเบฒเบŠเบทเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเปƒเบŠเป‰ query:

SELECT 
    name 
FROM sys.databases 
WHERE database_id=6;
GO

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบเบกเบฑเบ™เบเบฑเบ‡เบ„เบทเบเบฑเบ™ DB WideWorld เบœเบนเป‰เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ.

2.2) เบ–เบญเบ”เบฅเบฐเบซเบฑเบ” hobt_id

เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบเบฑเบš sys.partitions เบ”เป‰เบงเบเบ„เบนเปˆเบ‚เบญเบ‡ Joins เบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบเปเบฒเบ™เบปเบ”เบŠเบทเปˆเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบฅเบฐเบ”เบฑเบ”เบชเบฐเบ™เบต ...

USE WideWorldImporters;
GO
SELECT 
    sc.name as schema_name, 
    so.name as object_name, 
    si.name as index_name
FROM sys.partitions AS p
JOIN sys.objects as so on 
    p.object_id=so.object_id
JOIN sys.indexes as si on 
    p.index_id=si.index_id and 
    p.object_id=si.object_id
JOIN sys.schemas AS sc on 
    so.schema_id=sc.schema_id
WHERE hobt_id = 72057594041991168;
GO

เบกเบฑเบ™เบšเบญเบเบ‚เป‰เบญเบเบงเปˆเบฒเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เบฅเปเบ–เป‰เบฒเบขเบนเปˆเปƒเบ™ Application.Countries lock เป‚เบ”เบเปƒเบŠเป‰ PK_Application_Countries index.

2.3) เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ magic เป€เบฅเบฑเบเบ™เป‰เบญเบ %%lockres%% - เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบฅเบฑเบญเบ.

เบ–เป‰เบฒเบ‚เป‰เบญเบเบขเบฒเบเบฎเบนเป‰เบงเปˆเบฒเบขเบนเปˆเปเบ–เบงเปƒเบ”เบ—เบตเปˆเบฅเบฑเบญเบเบขเบนเปˆ, เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ %%lockres%% เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบเบปเบ‡เบเบฑเบš magic hash.
เบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปเบšเบšเบชเบญเบšเบ–เบฒเบกเบ™เบตเป‰เบˆเบฐเบชเบฐเปเบเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเปˆเบงเบ™เป€เบฅเบตเบ:

SELECT
    *
FROM Application.Countries (NOLOCK)
WHERE %%lockres%% = '(ce52f92a058c)';
GO

เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบžเบตเปˆเบก NOLOCK (เบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡ Klaus Aschenbrenner เปƒเบ™ Twitter) เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบชเบฒเบกเบฒเบ”เบเบฒเบเป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒ. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เบธเบฅเบฐเบเปเบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - เบ‚เป‰เบญเบเบšเปเปˆเบ„เบดเบ”เบงเปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เบ•เปเปˆเบžเบงเบเป€เบฎเบปเบฒ.
Voila, เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เปเปˆเบชเบนเป‰เป€เบžเบทเปˆเบญ!
Decipher Key เปเบฅเบฐ Page WaitResource เปƒเบ™ deadlocks เปเบฅเบฐ locks

เบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เปเบฅเบฐเบเบฒเบ™เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบˆเบทเปˆโ€‹เป„เบ”เป‰โ€‹เบงเปˆเบฒโ€‹เปƒเบœโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบซเบผเบฒเบโ€‹เบชเบดเปˆเบ‡โ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹, เปเบ•เปˆโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹เบซเบ™เป‰เบญเบโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบกเบฑเบโ€‹:

  • Paul Randal's post เบเปˆเบฝเบงเบเบฑเบš %%physloc%% เปเบฅเบฐ sys.fn_PhysLocFormatter (เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เปเบฒเบญเบดเบ”)
  • เบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบš StackOverflow เบเปˆเบฝเบงเบเบฑเบš เปƒเบŠเป‰ %%lockres%% (เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเบชเบญเบ‡). เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ„เปเบฒเบ•เบญเบšเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ•เบญเบš Grant Fritchey เบเปˆเบฝเบงเบเบฑเบš %%lockres%%, เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบ™เบ›เบต 2010.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™