Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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 |