Megosztás a következőn keresztül:


Hash figyelmeztetési eseményosztály

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A Hash Warning eseményosztály használható annak megfigyelésére, hogy mikor történt hash rekurziója vagy a hashing megszűnése (hash mentő) egy hash-művelet során.

A hash rekurzió akkor fordul elő, amikor a build input nem fér be a rendelkezésre álló memóriába, ami a bemenet több különálló partícióra való fellépéséhez vezet. Ha ezek közül bármelyik partíció még mindig nem fér be a rendelkezésre álló memóriába, az részrészekre oszlik, amelyeket szintén külön feldolgoznak. Ez a felosztási folyamat addig folytatódik, amíg minden partíció be nem fér a rendelkezésre álló memóriába, vagy amíg el nem éri a maximális rekurziós szintet (ami az IntegerData adatoszlopban látható).

A kivonatos mentés akkor fordul elő, ha egy kivonatolási művelet eléri a maximális rekurziós szintet, és egy másik tervre vált a fennmaradó particionált adatok feldolgozásához. A hash mentőcsomag általában torz adatok miatt történik.

A hash rekurszió és a hash mentés csökkenti a szervered teljesítményét. A hash rekurziójának és mentések gyakoriságának megszüntetése vagy csökkentése érdekében a következők egyikét végezzük:

  • Győződj meg róla, hogy a csatlakozó vagy csoportosított oszlopok statisztikái vannak.

  • Ha vannak statisztikák az oszlopokon, frissítsd őket.

  • Használj egy másik típusú csatlakozót. Például, ha megfelelő, használj helyette MERGE vagy LOOP csatlakozást.

  • Növeld a számítógépen rendelkezésre álló memóriát. A hash rekurzió vagy mentés akkor történik, amikor nincs elég memória a lekérdezések feldolgozásához, és azok át kell jutni a lemezre.

A csatlakozáshoz kapcsolódó oszlop statisztikai adatainak létrehozása vagy frissítése a leghatékonyabb módja a hash rekursziók vagy mentések számának csökkentésének.

Megjegyzés:

A grace hash csatlakozás és a rekurzív hash join kifejezéseket is használják a hash mentőcsomag leírására.

Fontos

Annak meghatározására, hogy hol történik a Hash Warning esemény, amikor a lekérdezésoptimalizáló végrehajtó tervet generál, gyűjtsünk egy Showplan eseményosztályt is a trace-ben. Bármelyik Showplan eseményosztályt választhatod, kivéve a Showplan szöveget és a Showplan szöveg (kódolatlan) eseményosztályokat, amelyek nem adnak vissza Node ID-t. A Showplans csomópontazonosítói minden műveletet azonosítanak, amit a lekérdezésoptimalizáló végez, amikor lekérdezés végrehajtási tervet generál. Ezeket a műveleteket operátoroknak nevezik, és a Showplan minden operátorának van Node ID-je. A Hash Warning eseményekhez tartozó ObjectID oszlop megfelel a Showplans csomóponti azonosítójának, így meg tudod állapítani, melyik operátor vagy művelet okozza a hibát.

Hash figyelmeztető eseményosztály adatoszlopai

Adatoszlop neve Adattípus Description Oszlopazonosító Szűrhető
ApplicationName nvarchar Annak az ügyfélalkalmazásnak a neve, amely létrehozta a kapcsolatot az SQL Server egy példányával. Ez az oszlop az alkalmazás által továbbított értékekkel van töltve, nem pedig a program megjelenített nevével. 10 Igen
ClientProcessID int A gazdaszámítógép által hozzárendelt azonosító ahhoz a folyamathoz, amelyben az ügyfélalkalmazás fut. Ez az adatoszlop akkor van feltöltve, ha az ügyfél megadja az ügyfél folyamatazonosítóját. 9 Igen
DatabaseID int Az adatbázis azonosítója, amelyet az USE adatbázis utasítás vagy az alapértelmezett adatbázis jelöl, ha egy adott példányra nem adott USE adatbázis utasítást adtak ki. Az SQL Server Profiler megjeleníti az adatbázis nevét, ha a ServerName adatoszlop rögzítve van a nyomkövetésben, és a kiszolgáló elérhető. Határozza meg az adatbázis értékét a DB_ID függvénnyel. 3 Igen
DatabaseName nvarchar Annak az adatbázisnak a neve, amelyben a felhasználói utasítás fut. 35 Igen
EventClass int Az esemény típusa = 55. 27 Nem
Eseménysorozat int Egy adott esemény sorrendje a kérelemben. 51 Nem
EventSubClass int Az esemény alosztály típusa.

0=Rekurzió

1=Mentés
21 Igen
GroupID int Annak a számítási feladatcsoportnak az azonosítója, amelyben az SQL Trace esemény aktiválódik. 66 Igen
Kiszolgálónév nvarchar Annak a számítógépnek a neve, amelyen az ügyfél fut. Ez az adatoszlop akkor van feltöltve, ha a kliens megadja a hosztnevet. A gazdanév meghatározásához használja az HOST_NAME függvényt. 8 Igen
IntegerData int Rekurziós szint (csak hash rekurzió). 25 Igen
IsSystem int Azt jelzi, hogy az esemény rendszerfolyamaton vagy felhasználói folyamaton történt-e. 1 = rendszer, 0 = felhasználó. 60 Igen
bejelentkezési név nvarchar A felhasználó bejelentkezésének neve (akár SQL Server biztonsági bejelentkezés, akár Windows bejelentkezési adatai DOMAIN<\username>< formájában>). 11 Igen
LoginSid image A bejelentkezett felhasználó biztonsági azonosítója (SID). Ezt az információt a sys.server_principals katalógus nézetben találhatod. Minden sid egyedi a kiszolgálón található minden bejelentkezéshez. 41 Igen
NTDomainName nvarchar Windows-tartomány, amelyhez a felhasználó tartozik. 7 Igen
NTUserName nvarchar Windows-felhasználónév. 6 Igen
Objektumazonosító int A repartícióban részt vevő hash csapat gyökérének csomópontazonosítója. Egyezik a Showplans csomópont azonosítójával. 22 Igen
RequestID int Az utasítást tartalmazó kérés azonosítója. 49 Igen
Kiszolgálónév nvarchar Az SQL Server példányának neve, amelyet nyomon követnek. 26
SessionLoginName nvarchar A munkamenetet létrehozó felhasználó bejelentkezési neve. Például, ha Login1-vel csatlakozol az SQL Serverhez, és egy utasítást futtatsz Login2-ként, akkor a SessionLoginName a Login1-et, a LoginName pedig Login2-t mutatja. Ez az oszlop az SQL Server- és a Windows-bejelentkezéseket is megjeleníti. 64 Igen
SPID int Annak a munkamenetnek az azonosítója, amelyen az esemény történt. 12 Igen
StartTime datetime Az esemény indításának időpontja, ha elérhető. 14 Igen
Tranzakcióazonosító bigint A tranzakció rendszer által hozzárendelt azonosítója. 4 Igen
XactSequence bigint Az aktuális tranzakciót leíró jogkivonat. 50 Igen

Lásd még:

sp_trace_setevent (Transact-SQL)
Csatlakozik