Hashvarningshändelseklass

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Hashvarningshändelseklassen kan användas för att övervaka när en hashrekursion eller upphörande av hashning (hash bailout) har inträffat under en hashningsoperation.

Hashrekursion uppstår när byggindatan inte får plats i tillgängligt minne, vilket leder till att indata delas upp i flera partitioner som behandlas separat. Om någon av dessa partitioner fortfarande inte får plats i tillgängligt minne delas den upp i delpartitioner, som också behandlas separat. Denna delningsprocess fortsätter tills varje partition passar in i tillgängligt minne eller tills maximal rekursionsnivå uppnås (visas i kolumnen IntegerData).

Hash-räddningsaktion sker när en hash-åtgärd når sin maximala rekursionsnivå och övergår till en alternativ plan för att bearbeta återstående partitionerade data. Hash-räddning sker vanligtvis på grund av snedvriden data.

Hash-rekursion och hash-räddning orsakar minskad prestanda på din server. För att eliminera eller minska frekvensen av hashrekursion och räddningar, gör något av följande:

  • Se till att statistik finns för de kolumner som sammanfogas eller grupperas.

  • Om statistik finns på kolumnerna, uppdatera dem.

  • Använd en annan typ av join. Använd till exempel en MERGE- eller LOOP-join istället, om det är lämpligt.

  • Öka tillgängligt minne på datorn. Hashrekursion eller bailout sker när det inte finns tillräckligt med minne för att bearbeta frågor på plats och de måste spridas till disken.

Att skapa eller uppdatera statistiken för kolumnen som ingår i joinen är det mest effektiva sättet att minska antalet hashrekursion eller bailouts som sker.

Anmärkning

Termerna grace hash join och rekursiv hash join används också för att beskriva hash bailout.

Viktigt!

För att avgöra var Hash Warning-händelsen inträffar när frågeoptimeraren genererar en exekveringsplan, bör du också samla in en Showplan-händelseklass i spåret. Du kan välja vilken av Showplan-eventklasserna som helst utom Showplan Text och Showplan Text (okodad) eventklasserna, som inte ger något Node-ID. Nod-ID:n i Showplans identifierar varje operation som frågeoptimeraren utför när den genererar en plan för frågeexekvering. Dessa operationer kallas operatorer, och varje operator i en Showplan har ett nod-ID. Kolumnen ObjectID för Hashvarningshändelser motsvarar Node-ID:t i Showplans så att du kan avgöra vilken operator, eller operation, som orsakar felet.

Kolumner för hashvarningshändelseklass

Namn på datakolumn Datatyp Description Kolumn-ID Filtrerbar
ApplicationName nvarchar Namnet på klientprogrammet som skapade anslutningen till en instans av SQL Server. Denna kolumn fylls med de värden som skickats av applikationen istället för programmets visade namn. 10 Yes
ClientProcessID int ID som tilldelats av värddatorn till den process där klientprogrammet körs. Denna datakolumn fylls i om klienten tillhandahåller ett klientprocess-ID. 9 Yes
DatabaseID int ID för databasen som specificeras av USE-databassatsen eller standarddatabasen om ingen USE-databassats har utfärdats för en given instans. SQL Server Profiler visar namnet på databasen om datakolumnen ServerName samlas in i spårningen och servern är tillgänglig. Fastställa värdet för en databas med hjälp av funktionen DB_ID. 3 Yes
DatabaseName nvarchar Namnet på databasen där användaruttryck körs. 35 Yes
EventClass int Typ av evenemang = 55. 27 Nej
Händelseföljd int Sekvens av en viss händelse i begäran. 51 Nej
EventSubClass int Typ av händelseunderklass.

0=Rekursion

1=Räddningsaktion
21 Yes
GroupID int ID för arbetsbelastningsgruppen där SQL Trace-händelsen utlöses. 66 Yes
värdnamn nvarchar Namnet på den dator där klienten körs. Denna datakolumn fylls i om klienten anger värdnamnet. För att bestämma värdnamnet, använd funktionen HOST_NAME. 8 Yes
IntegerData int Rekursionsnivå (endast hashrekursion). 25 Yes
IsSystem int Anger om händelsen inträffade i en systemprocess eller en användarprocess. 1 = system, 0 = användare. 60 Yes
Inloggningsnamn nvarchar Namnet på användarens inloggning (antingen SQL Server-säkerhetsinloggning eller Windows-inloggningsuppgifterna i form av <DOMÄN\><användarnamn>). 11 Yes
LoginSid image Säkerhetsidentifieringsnummer (SID) för den inloggade användaren. Du kan hitta denna information i sys.server_principals katalogvy. Varje SID är unikt för varje inloggning på servern. 41 Yes
NTDomainName nvarchar Windows-domän som användaren tillhör. 7 Yes
NTUserName nvarchar Windows-användarnamn. 6 Yes
ObjectID (Objekt-ID) int Nod-ID för roten för hashteamet som är involverat i ompartitioneringen. Motsvarar nod-ID i Showplans. 22 Yes
RequestID int ID på förfrågan som innehåller uttalandet. 49 Yes
Servernamn nvarchar Namnet på den instans av SQL Server som spåras. 26
SessionLoginName nvarchar Inloggningsnamn för den användare som påbörjade sessionen. Till exempel, om du ansluter till SQL Server med Login1 och kör en sats som Login2, visar SessionLoginName Login1 och LoginName visar Login2. Den här kolumnen visar både SQL Server- och Windows-inloggningar. 64 Yes
SPID int ID för sessionen där händelsen inträffade. 12 Yes
StartTime datetime Tidpunkt då händelsen startade, om den är tillgänglig. 14 Yes
TransactionID bigint Systemtilldelat ID för transaktionen. 4 Yes
XactSequence bigint Token som beskriver den aktuella transaktionen. 50 Yes

Se även

sp_trace_setevent (Transact-SQL)
Går