Iddeċifra Ċavetta u Page WaitResource f'deadlocks u serraturi
Jekk tuża r-rapport tal-proċess imblukkat jew tiġbor il-graffs tal-imblokk ipprovduti minn SQL Server perjodikament, tiltaqa 'ma' affarijiet bħal dawn:
Xi drabi jkun hemm aktar informazzjoni f'dak l-XML ġgant li qed tistudja (il-grafiċi tal-imblokk fihom lista ta' riżorsi li tgħinek issib l-ismijiet tal-oġġett u tal-indiċi), iżda mhux dejjem.
Dan it-test jgħinek tiddeċifrahom.
L-informazzjoni kollha li hawn tinsab fuq l-Internet f'diversi postijiet, hija biss imqassma ħafna! Irrid ngħaqqad kollox flimkien - minn PAĠNA DBCC għal hobt_id u għall-funzjonijiet mhux dokumentati %%physloc%% u %%lockres%%.
L-ewwel, ejja nitkellmu dwar tistenna fuq is-serraturi tal-PAĠNA, u mbagħad ngħaddu għal serraturi KEY.
1.2) Tfittex l-isem tal-fajl tad-dejta - jekk inti interessat
Se nużaw data_file_id fil-pass li jmiss biex insibu l-isem tat-tabella. Tista 'sempliċement taqbeż għall-pass li jmiss, imma jekk inti interessat fl-isem tal-fajl, tista' ssibu billi tmexxi mistoqsija fil-kuntest tad-database misjuba, billi tissostitwixxi data_file_id f'din il-mistoqsija:
USE WideWorldImporters;
GO
SELECT
name,
physical_name
FROM sys.database_files
WHERE file_id = 3;
GO
Fid-database WideWorldImporters dan huwa fajl imsejjaħ WWI_UserData u għandi restawrat għal C:MSSQLDATAWideWorldImporters_UserData.ndf. (Oops, qabadni npoġġi fajls fuq id-diska tas-sistema! Le! Dak kien skomdu).
1.3) Ikseb l-isem tal-oġġett minn PAĠNA DBCC
Issa nafu li l-paġna #70133 fil-fajl tad-dejta 3 tappartjeni għad-database WorldWideImporters. Nistgħu nħarsu lejn il-kontenut ta 'din il-paġna billi tuża l-PAĠNA DBCC mhux dokumentata u l-bandiera tat-traċċa 3604.
Nota: Nippreferi nuża DBCC PAGE fuq kopja restawrata minn backup x'imkien fuq server ieħor, għax hija ħaġa mhux dokumentata. F'xi każijiet, hi jista' jirriżulta fil-ħolqien ta' miżbla (madwar. traduttur - il-link, sfortunatament, ma twassal imkien, iżda jekk niġġudikaw mill-url, qed nitkellmu dwar indiċijiet iffiltrati).
/* 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
Scrolling permezz tar-riżultati, tista 'ssib object_id u index_id.
Kważi lest! Issa tista' ssib it-tabella u l-ismijiet tal-indiċi billi tuża l-mistoqsija:
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
U issa naraw li l-istennija tal-lock kienet fuq l-indiċi PK_Sales_OrderLines tat-tabella Sales.OrderLines.
Nota: F'SQL Server 2014 u aktar tard, l-isem tal-oġġett jista' jinstab ukoll bl-użu tad-DMO mhux dokumentat sys.dm_db_database_page_allocations. Imma trid tfittex kull paġna fid-database, li ma tantx tidher friska għal databases kbar, għalhekk użajt DBCC PAGE.
1.4) Huwa possibbli li tara d-dejta fuq il-paġna li kienet imblukkata?
Ukoll, iva. Imma... żgur li għandek bżonnha tassew?
Huwa bil-mod anke fuq imwejjed żgħar. Iżda huwa tip ta 'frisk, allura peress li qrajt s'issa... ejja nitkellmu dwar %%physloc%%!
Issa li nafu li ridna nissakkar il-paġna f'Sales.OrderLines, nistgħu nħarsu lejn id-dejta kollha f'din it-tabella, li hija maħżuna fil-fajl tad-dejta #3 fuq il-paġna #70133, billi tuża din il-mistoqsija:
Use WideWorldImporters;
GO
SELECT
sys.fn_PhysLocFormatter (%%physloc%%),
*
FROM Sales.OrderLines (NOLOCK)
WHERE sys.fn_PhysLocFormatter (%%physloc%%) like '(3:70133%'
GO
Kif għedt, huwa bil-mod anke fuq imwejjed ċkejkna. Żidt NOLOCK mat-talba għax għad m’għandna l-ebda garanzija li d-dejta li rridu nħarsu lejha hija eżattament l-istess kif kienet meta nstab is-serratura – sabiex inkunu nistgħu nagħmlu qari maħmuġin b’mod sigur.
Iżda, hurra, il-mistoqsija tirritorna lili l-istess 25 ringiela li għalihom iġġieldet il-mistoqsija tagħna
Biżżejjed dwar il-paġni serraturi. X'jiġri jekk qed nistennew lock KEY?
2) waitresource=“KEY: 6:72057594041991168 (ce52f92a058c)” = Database_Id, HOBT_Id (magic hash li jista’ jiġi decrypted bl-użu ta’ %%lockres%% jekk verament trid dak)
Jekk il-mistoqsija tiegħek tipprova tissakkar rekord fl-indiċi u tissakkar innifsu, tispiċċa b'tip ta 'indirizz kompletament differenti.
Tkissir "6:72057594041991168 (ce52f92a058c)" f'partijiet, irridu:
database_id = 6
hobt_id = 72057594041991168
hash magic = (ce52f92a058c)
2.1) Iddecrypt database_id
Dan jaħdem eżattament l-istess bħall-eżempju ta 'hawn fuq! Sib l-isem tad-database billi tuża l-mistoqsija:
SELECT
name
FROM sys.databases
WHERE database_id=6;
GO
Fil-kuntest tad-database misjuba, għandek bżonn tesegwixxi mistoqsija lil sys.partitions b'par ta' tingħaqad li tgħin biex tiddetermina l-ismijiet tat-tabella u l-indiċi...
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
Jgħidli li t-talba kienet qed tistenna fuq l-Application.Countries lock billi tuża l-indiċi PK_Application_Countries.
2.3) Issa ftit magic %%lockres%% - jekk trid issir taf liema dħul kien imsakkar
Jekk verament irrid inkun naf liema ringiela kienet fuq is-serratura, nista' nsib billi nagħmel mistoqsija fuq it-tabella nnifisha. Nistgħu nużaw il-funzjoni mhux dokumentata %%lockres%% biex insibu dħul li taqbel mal-hash magic.
Jekk jogħġbok innota li din il-mistoqsija se tiskennja t-tabella kollha, u fuq tabelli kbar dan jista' ma jkun pjaċevoli xejn:
SELECT
*
FROM Application.Countries (NOLOCK)
WHERE %%lockres%% = '(ce52f92a058c)';
GO
Żidt NOLOCK (fuq parir ta’ Klaus Aschenbrenner fuq Twitter) għax l-imblukkar jistgħu jsiru problema. Irridu biss inħarsu lejn dak li hemm issa, u mhux dak li kien hemm meta bdiet it-tranżazzjoni - ma naħsibx li l-konsistenza tad-dejta hija importanti għalina.
Voila, ir-rekord li ġġieldu għalih!
Rikonoxximenti u qari ulterjuri
Ma niftakarx min iddeskriva l-ewwel ħafna minn dawn l-affarijiet, iżda hawn żewġ postijiet dwar l-affarijiet l-inqas dokumentati li tista' tixtieq: