Delen via


Gebeurtenisklasse Hashwaarschuwing

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

De Hash Warning gebeurtenisklasse kan worden gebruikt om te monitoren wanneer een hashrecursie of het stoppen van hashing (hash bailout) heeft plaatsgevonden tijdens een hashbewerking.

Hash-recursie treedt op wanneer de build-invoer niet in het beschikbare geheugen past, wat resulteert in de splitsing van input in meerdere partities die afzonderlijk worden verwerkt. Als een van deze partities nog steeds niet in het beschikbare geheugen past, wordt deze opgesplitst in subpartities, die ook afzonderlijk worden verwerkt. Dit splitsingsproces gaat door totdat elke partitie in het beschikbare geheugen past of totdat het maximale recursieniveau is bereikt (weergegeven in de kolom IntegerData-gegevens).

Hash-borging treedt op wanneer een hash-bewerking het maximale recursieniveau bereikt en naar een alternatief plan wordt verplaatst om de resterende gepartitioneerde gegevens te verwerken. Hash-bailout vindt meestal plaats door scheve data.

Hash-recursie en hash-bailout zorgen voor verminderde prestaties in je server. Om de frequentie van hashrecursie en bailouts te elimineren of te verminderen, doe een van de volgende dingen:

  • Zorg ervoor dat er statistieken bestaan over de kolommen die worden gekoppeld of gegroepeerd.

  • Als er statistieken op de kolommen bestaan, werk ze dan bij.

  • Gebruik een ander type join. Gebruik bijvoorbeeld een MERGE of LOOP join, indien van toepassing.

  • Verhoog het beschikbare geheugen op de computer. Hash-recursie of bailout treedt op wanneer er niet genoeg geheugen is om queries te verwerken en ze naar de schijf moeten overspoelen.

Het aanmaken of bijwerken van de statistieken op de kolom die betrokken is bij de join is de meest effectieve manier om het aantal hash-recursie of bailouts dat plaatsvindt te verminderen.

Opmerking

De termen grace hash join en recursieve hash join worden ook gebruikt om hash bailout te beschrijven.

Belangrijk

Om te bepalen waar het Hash Warning-event plaatsvindt wanneer de query-optimizer een uitvoeringsplan genereert, moet je ook een Showplan-gebeurtenisklasse in de trace verzamelen. Je kunt kiezen voor elk van de Showplan-eventklassen, behalve de Showplan Text- en Showplan Text (Unencoded) eventklassen, die geen Node-ID teruggeven. Node-ID's in Showplans identificeren elke bewerking die de queryoptimizer uitvoert wanneer hij een query-uitvoeringsplan genereert. Deze bewerkingen worden operatoren genoemd, en elke operator in een Showplan heeft een Node-ID. De ObjectID-kolom voor Hash Warning-gebeurtenissen komt overeen met de Node-ID in Showplans, zodat je kunt bepalen welke operator of bewerking de fout veroorzaakt.

Hashwaarschuwingsgebeurtenis Klasse Datakolommen

Naam van gegevenskolom Gegevenstype Description Kolom-id Filterbaar
ApplicationName nvarchar Naam van de clienttoepassing die de verbinding met een exemplaar van SQL Server heeft gemaakt. Deze kolom wordt gevuld met de waarden die door de applicatie zijn doorgegeven, in plaats van met de weergegeven naam van het programma. 10 Yes
ClientProcessID int De id die door de hostcomputer is toegewezen aan het proces waarop de clienttoepassing wordt uitgevoerd. Deze datakolom wordt ingevuld als de client een clientproces-ID oplevert. 9 Yes
DatabaseID int ID van de database die door de USE-database-instructie wordt gespecificeerd, of de standaarddatabase, als er voor een bepaalde instantie geen USE-database-instructie is uitgegeven. SQL Server Profiler geeft de naam van de database weer als de kolom ServerName-gegevens wordt vastgelegd in de tracering en de server beschikbaar is. Bepaal de waarde voor een database met behulp van de functie DB_ID. 3 Yes
DatabaseName nvarchar Naam van de database waarin de gebruikersinstructie wordt uitgevoerd. 35 Yes
EventClass int Type evenement = 55. 27 Nee.
GebeurtenisVolgorde int Volgorde van een bepaalde gebeurtenis binnen de aanvraag. 51 Nee.
EventSubClass int Type gebeurtenis-subklasse.

0=Recursie

1=Redding
21 Yes
GroupID int Id van de workloadgroep waarin de SQL Trace-gebeurtenis wordt geactiveerd. 66 Yes
Hostnaam nvarchar Naam van de computer waarop de client wordt uitgevoerd. Deze datakolom wordt ingevuld als de client de hostnaam opgeeft. Om de hostnaam te bepalen, gebruik je de functie HOST_NAME. 8 Yes
IntegerData int Recursieniveau (alleen hash-recursie). vijfentwintig Yes
IsSysteem int Geeft aan of de gebeurtenis heeft plaatsgevonden in een systeemproces of een gebruikersproces. 1 = systeem, 0 = gebruiker. 60 Yes
Gebruikersnaam nvarchar Naam van de inloggegevens van de gebruiker (ofwel SQL Server beveiligingslogin of de Windows-inloggegevens in de vorm van< DOMAIN\><gebruikersnaam>). 11 Yes
LoginSid image Beveiligingsidentificatienummer (SID) van de aangemelde gebruiker. Je kunt deze informatie vinden in de catalogusweergave van sys.server_principals. Elke SID is uniek voor elke aanmelding op de server. 41 Yes
NTDomainName nvarchar Windows-domein waartoe de gebruiker behoort. 7 Yes
NTUserName nvarchar Windows-gebruikersnaam. 6 Yes
ObjectID int Node-ID van de wortel van het hashteam dat betrokken is bij de herpartition. Komt overeen met de Node-ID in Showplans. 22 Yes
RequestID int ID van het verzoek dat de verklaring bevat. 49 Yes
Servernaam nvarchar De naam van de instantie van SQL Server die wordt getraceerd. 26
SessionLoginName nvarchar Aanmeldingsnaam van de gebruiker die de sessie heeft gestart. Als je bijvoorbeeld verbinding maakt met SQL Server via Login1 en een instructie uitvoert als Login2, toont SessionLoginName Login1 en LoginName Login2. In deze kolom worden zowel SQL Server- als Windows-aanmeldingen weergegeven. 64 Yes
SPID int Id van de sessie waarop de gebeurtenis heeft plaatsgevonden. 12 Yes
StartTime datetime Tijdstip waarop de gebeurtenis is gestart, indien beschikbaar. 14 Yes
TransactionID bigint Door het systeem toegewezen id van de transactie. 4 Yes
XactSequence bigint Token dat de huidige transactie beschrijft. 50 Yes

Zie ook

sp_trace_setevent (Transact-SQL)
Joins