ProHoster > Blag > Riarachán > Decipher Eochair agus Leathanach WaitResource i glas agus glas
Decipher Eochair agus Leathanach WaitResource i glas agus glas
Má úsáideann tú an tuairisc ar an bpróiseas bactha nó má bhailíonn tú na graif díghlasála a sholáthraíonn SQL Server go tréimhsiúil, tiocfaidh tú ar rudaí mar seo:
Uaireanta beidh níos mó faisnéise ar fáil san fathach XML sin a bhfuil tú ag déanamh staidéir air (tá liosta acmhainní ar ghraif dhíghlasála a chuidíonn leat na hainmneacha oibiachta agus innéacs a fháil amach), ach ní i gcónaí.
Cabhróidh an téacs seo leat iad a aimsiú.
Tá an t-eolas go léir atá anseo ar an Idirlíon in áiteanna éagsúla, níl sé ach an-dáilte! Ba mhaith liom gach rud a chur le chéile - ó LEATHANACH DBCC go hobt_id agus go dtí na feidhmeanna %% physloc% agus %% lockres% gan doiciméadú.
Ar dtús, déanaimis labhairt faoi fheitheamh ar ghlais LEATHANACH, agus ansin bogfaimid ar aghaidh go dtí na glais EOCHAIR.
1.2) Ag lorg ainm an chomhaid sonraí - má tá suim agat ann
Táimid chun data_file_id a úsáid sa chéad chéim eile chun ainm an tábla a aimsiú. Is féidir leat scipeáil go dtí an chéad chéim eile, ach má tá suim agat in ainm an chomhaid, is féidir leat é a aimsiú trí cheist a rith i gcomhthéacs an bhunachar sonraí aimsithe, ag cur data_file_id ina ionad sa cheist seo:
USE WideWorldImporters;
GO
SELECT
name,
physical_name
FROM sys.database_files
WHERE file_id = 3;
GO
I mbunachar sonraí WideWorldImporters is comhad é seo darb ainm WWI_UserData agus tá sé curtha ar ais agam go C:MSSQLDATAWideWorldImporters_UserData.ndf. (Úps, fuair tú greim orm ag cur comhaid ar diosca an chórais! Ní hea! Bhí sé sin awkward).
1.3) Faigh ainm an réad ó LEATHANACH DBCC
Anois tá a fhios againn go mbaineann leathanach #70133 i gcomhad sonraí 3 le bunachar sonraí WorldWideImporters. Is féidir linn féachaint ar a bhfuil sa leathanach seo trí úsáid a bhaint as LEATHANACH DBCC gan doiciméadú agus bratach 3604 a lorg.
Nóta: Is fearr liom LEATHANACH DBCC a úsáid ar chóip athchóirithe ó chúltaca áit éigin ar fhreastalaí eile, toisc gur rud gan doiciméid é. I gcásanna áirithe, sí d’fhéadfadh dumpáil a bheith mar thoradh air (thart. aistritheoir - níl an nasc, ar an drochuair, i gceannas ar áit ar bith, ach ag breith ar an url, táimid ag caint faoi innéacsanna scagtha).
/* 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
Ag scrollaigh trí na torthaí, is féidir leat object_id agus index_id a aimsiú.
Beagnach críochnaithe! Anois is féidir leat na hainmneacha táblaí agus innéacs a fháil ag baint úsáide as an gceist:
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 anois feicimid go raibh an fanacht glasála ar an innéacs PK_Sales_OrderLines den tábla Sales.OrderLines.
Nóta: In SQL Server 2014 agus níos déanaí, is féidir an t-ainm oibiachta a fháil freisin ag baint úsáide as an DMO gan cháipéisí sys.dm_db_database_page_allocations. Ach caithfidh tú gach leathanach sa bhunachar sonraí a fhiosrú, rud nach bhfuil cuma an-fhionnuar ar bhunachair shonraí mhóra, mar sin d'úsáid mé LEATHANACH DBCC.
1.4) An féidir na sonraí a fheiceáil ar an leathanach ar cuireadh bac air?
Bhuel, tá. Ach... an bhfuil tú cinnte go bhfuil sé de dhíth ort i ndáiríre?
Tá sé mall fiú ar tháblaí beaga. Ach tá sé cineál fionnuar, mar sin ó tá tú ag léamh go dtí seo ... a ligean ar labhairt faoi %% physloc%%!
Anois go bhfuil a fhios againn gur theastaigh uainn an leathanach a ghlasáil i Sales.OrderLines, is féidir linn breathnú ar na sonraí go léir sa tábla seo, atá stóráilte i gcomhad sonraí #3 ar leathanach #70133, ag baint úsáide as an gceist seo:
Use WideWorldImporters;
GO
SELECT
sys.fn_PhysLocFormatter (%%physloc%%),
*
FROM Sales.OrderLines (NOLOCK)
WHERE sys.fn_PhysLocFormatter (%%physloc%%) like '(3:70133%'
GO
Mar a dúirt mé, tá sé mall fiú ar tháblaí beaga. Chuir mé NOLOCK leis an iarratas toisc nach bhfuil aon ráthaíocht againn go fóill go bhfuil na sonraí a dteastaíonn uainn breathnú orthu díreach mar a bhí nuair a aimsíodh an glas - ionas gur féidir linn léamh salach a dhéanamh go sábháilte.
Ach, deifir, cuireann an fiosrúchán ar ais chugam na 25 sraith chéanna ar throid ár bhfiosrúchán ina leith
Go leor faoi ghlas PAGE. Cad a tharlóidh má táimid ag fanacht le glas EOCHAIR?
2) waitresource=“EOCHAIR: 6:72057594041991168 (ce52f92a058c)” = Database_ID, HOBT_Id (hash draíochta is féidir a dhíchriptiú le %%lockres%% más mian leat é sin i ndáiríre)
Má dhéanann do cheist iarracht taifead a ghlasáil san innéacs agus má dhéantar é a ghlasáil, beidh seoladh iomlán difriúil agat sa deireadh.
Ag briseadh “6: 72057594041991168 (ce52f92a058c)” ina gcodanna, faighimid:
database_id = 6
hobt_id = 72057594041991168
hash draíochta = (ce52f92a058c)
2.1) Díchriptigh database_id
Oibríonn sé seo díreach mar an gcéanna leis an sampla thuas! Faigh ainm an bhunachair shonraí ag baint úsáid as an gceist:
SELECT
name
FROM sys.databases
WHERE database_id=6;
GO
I gcomhthéacs an bhunachar sonraí aimsithe, ní mór duit ceist a chur i gcrích ar sys.partitions le péire nascanna a chuideoidh le hainmneacha an tábla agus an t-innéacs a chinneadh...
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
Insíonn sé dom go raibh an t-iarratas ag fanacht ar ghlas Application.Countries ag baint úsáide as an t-innéacs PK_Application_Countries.
2.3) Anois beagán draíochta %%lockres%% - más mian leat a fháil amach cén iontráil a bhí faoi ghlas
Más mian liom a fháil amach cén tsraith a raibh an glas uirthi, is féidir liom a fháil amach ach an tábla féin a cheistiú. Is féidir linn an fheidhm %% lockres%% gan doiciméad a úsáid chun iontráil a aimsiú a mheaitseálann an hash draíochta.
Tabhair faoi deara le do thoil go ndéanfaidh an cheist seo an tábla ar fad a scanadh, agus ar tháblaí móra b'fhéidir nach mbeidh sé seo taitneamhach ar chor ar bith:
SELECT
*
FROM Application.Countries (NOLOCK)
WHERE %%lockres%% = '(ce52f92a058c)';
GO
chuir mé NOLOCK leis (ar chomhairle Klaus Aschenbrenner ar Twitter) mar is féidir bacainní a bheith ina fhadhb. Níl uainn ach breathnú ar a bhfuil ann anois, agus ní ar a raibh ann nuair a thosaigh an t-idirbheart - ní dóigh liom go bhfuil comhsheasmhacht sonraí tábhachtach dúinn.
Voila, an taifead a throid muid ar a son!
Buíochas agus tuilleadh léitheoireachta
Ní cuimhin liom cé a rinne cur síos ar go leor de na rudaí seo ar dtús, ach seo dhá phostáil faoi na rudaí is lú doiciméadaithe a d’fhéadfadh a bheith uait: