ProHoster > Blog > Rianachd > Decipher Key agus Page WaitResource ann an glasan-glasaidh agus glasan
Decipher Key agus Page WaitResource ann an glasan-glasaidh agus glasan
Ma chleachdas tu an aithisg pròiseas dùinte no ma chruinnicheas tu na grafaichean glasaidh a bheir SQL Server seachad bho àm gu àm, thig thu tarsainn air rudan mar seo:
Aig amannan bidh barrachd fiosrachaidh anns an XML mòr sin a tha thu a’ sgrùdadh (tha liosta de ghoireasan ann an grafaichean glasaidh a chuidicheas tu gus ainmean an nì agus an clàr-amais a lorg), ach chan ann an-còmhnaidh.
Cuidichidh an teacsa seo thu gus an tuigsinn.
Tha a h-uile fiosrachadh a tha an seo air an eadar-lìn ann an diofar àiteachan, tha e dìreach air a chuairteachadh gu mòr! Tha mi airson a h-uile càil a chuir ri chèile - bho DBCC PAGE gu hobt_id agus gu na gnìomhan %% physloc%% agus %%lockres%% gun sgrìobhainn.
An toiseach, bruidhnidh sinn mu dheidhinn feitheamh air glasan DUILLEAG, agus an uairsin gluaisidh sinn air adhart gu prìomh ghlasan.
1.2) A 'coimhead airson ainm an fhaidhle dàta - ma tha ùidh agad
Tha sinn gu bhith a’ cleachdadh data_file_id san ath cheum gus ainm a’ chlàir a lorg. Faodaidh tu dìreach leum chun ath cheum, ach ma tha ùidh agad ann an ainm an fhaidhle, gheibh thu e le bhith a’ ruith ceist ann an co-theacs an stòr-dàta a chaidh a lorg, a’ cur data_file_id an àite a’ cheist seo:
USE WideWorldImporters;
GO
SELECT
name,
physical_name
FROM sys.database_files
WHERE file_id = 3;
GO
Ann an stòr-dàta WideWorldImporters tha seo na fhaidhle air a bheil WWI_UserData agus tha mi air ath-nuadhachadh gu C:MSSQLDATAWideWorldImporters_UserData.ndf. (Och, ghlac thu mi a’ cur fhaidhlichean air diosc an t-siostaim! Chan e! Bha sin neònach).
1.3) Faigh ainm an nì bho DUILLEAG DBCC
A-nis tha fios againn gur ann do stòr-dàta WorldWideImporters a tha duilleag #70133 ann am faidhle dàta 3. Is urrainn dhuinn sùil a thoirt air susbaint na duilleige seo a’ cleachdadh DUILLEAG DBCC gun sgrìobhainn agus lorg bratach 3604.
Nota: Is fheàrr leam DUILLEAG DBCC a chleachdadh air leth-bhreac ath-leasaichte bho chùl-taic an àiteigin air frithealaiche eile, oir is e rud gun sgrìobhainn a th’ ann. Ann an cuid de chùisean, i dh’ fhaodadh gun tèid dump a chruthachadh (mu thuairmeas. eadar-theangair - chan eil an ceangal, gu mì-fhortanach, a’ stiùireadh àite sam bith, ach a’ breithneachadh leis an url, tha sinn a’ bruidhinn air clàran-amais sìoltachaidh).
/* 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
A’ gluasad tro na toraidhean, gheibh thu object_id agus index_id.
Cha mhòr deiseil! A-nis gheibh thu na h-ainmean clàr agus clàr-amais a’ cleachdadh a’ cheist:
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
Agus a-nis chì sinn gu robh am feitheamh glasaidh air clàr-amais PK_Sales_OrderLines den chlàr Sales.OrderLines.
Nota: Ann an SQL Server 2014 agus nas fhaide air adhart, gheibhear ainm an nì cuideachd a’ cleachdadh an DMO sys.dm_db_database_page_allocations gun sgrìobhainn. Ach feumaidh tu a h-uile duilleag san stòr-dàta a cheasnachadh, rud nach eil a’ coimhead gu math fionnar airson stòran-dàta mòra, agus mar sin chleachd mi DUILLEAG DBCC.
1.4) A bheil e comasach an dàta fhaicinn air an duilleag a chaidh a bhacadh?
Uill, tha. Ach... a bheil thu cinnteach gu bheil fìor fheum agad air?
Tha e slaodach eadhon air bùird beaga. Ach tha e car math, mar sin leis gu bheil thu air leughadh cho fada seo... bruidhnidh sinn mu dheidhinn %% physloc%%!
A-nis gu bheil fios againn gu robh sinn airson an duilleag a ghlasadh ann an Sales.OrderLines, is urrainn dhuinn coimhead air an dàta gu lèir sa chlàr seo, a tha air a stòradh ann am faidhle dàta #3 air duilleag #70133, a’ cleachdadh a’ cheist seo:
Use WideWorldImporters;
GO
SELECT
sys.fn_PhysLocFormatter (%%physloc%%),
*
FROM Sales.OrderLines (NOLOCK)
WHERE sys.fn_PhysLocFormatter (%%physloc%%) like '(3:70133%'
GO
Mar a thuirt mi, tha e slaodach eadhon air bùird beaga. Chuir mi NOLOCK ris an iarrtas leis nach eil gealltanas sam bith againn fhathast gu bheil an dàta a tha sinn airson coimhead air dìreach mar a bha e nuair a chaidh a’ ghlas a lorg - gus an urrainn dhuinn leughaidhean salach a dhèanamh gu sàbhailte.
Ach, cabhaig, tha a’ cheist a’ tilleadh thugam na h-aon 25 sreathan ris an do shabaid a’ cheist againn
Gu leòr mu ghlasan DUILLEAG. Dè ma tha sinn a’ feitheamh ri PRÌOMH ghlas?
2) waitresource=“PRÌOMH: 6:72057594041991168 (ce52f92a058c)” = Database_Id, HOBT_Id (hash draoidheil a ghabhas a dhì-chrioptachadh le %%lockres%% ma tha thu dha-rìribh ag iarraidh sin)
Ma dh’ fheuchas do cheist ri clàr a ghlasadh sa chlàr-amais agus ma thèid a ghlasadh fhèin, bidh seòladh gu tur eadar-dhealaichte agad.
A’ briseadh “6: 72057594041991168 (ce52f92a058c)” ann am pàirtean, gheibh sinn:
stòr-dàta_id = 6
hobt_id = 72057594041991168
draoidheachd hash = (ce52f92a058c)
2.1) dì-chrioptaich database_id
Bidh seo ag obair dìreach mar an eisimpleir gu h-àrd! Lorg ainm an stòr-dàta a’ cleachdadh a’ cheist:
SELECT
name
FROM sys.databases
WHERE database_id=6;
GO
Ann an co-theacs an stòr-dàta a chaidh a lorg, feumaidh tu ceist a chuir gu sys.partitions le paidhir de cheangalaichean a chuidicheas le bhith a’ dearbhadh ainmean a’ bhùird agus a’ chlàr-amais...
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
Tha e ag innse dhomh gun robh an t-iarrtas a’ feitheamh air a’ ghlas Application.Countries a’ cleachdadh clàr-amais PK_Application_Countries.
2.3) A-nis beagan draoidheachd %%lockres%% - ma tha thu airson faighinn a-mach dè an inntrigeadh a chaidh a ghlasadh
Ma tha mi dha-rìribh ag iarraidh faighinn a-mach dè an sreath air an robh a’ ghlas, gheibh mi a-mach le bhith a’ ceasnachadh a’ bhùird fhèin. 'S urrainn dhuinn an gnìomh %%lockres%% gun sgrìobhainn a chleachdadh gus inntrigeadh a lorg a fhreagras ris an hash draoidheil.
Thoir an aire gum bi a’ cheist seo a’ sganadh a’ bhùird gu lèir, agus air bùird mòra is dòcha nach bi seo spòrsail idir:
SELECT
*
FROM Application.Countries (NOLOCK)
WHERE %%lockres%% = '(ce52f92a058c)';
GO
chuir mi NOLOCK ris (air comhairle Klaus Aschenbrenner air Twitter) oir faodaidh bacadh a bhith na dhuilgheadas. Tha sinn dìreach airson coimhead air na tha ann an-dràsta, agus chan e na bha ann nuair a thòisich an gnothach - chan eil mi a’ smaoineachadh gu bheil cunbhalachd dàta cudromach dhuinn.
Voila, an clàr a bha sinn a’ sabaid air a shon!
Buidheachas agus tuilleadh leughaidh
Chan eil cuimhne agam cò thug cunntas air mòran de na rudan sin an toiseach, ach seo dà phost mu na rudan as lugha clàraichte a dh’ fhaodadh tu a bhith ag iarraidh: