Sdílet prostřednictvím


Třída událostí upozornění na hash

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Třída událostí Hash Warning může být použita ke sledování, kdy během hashovací operace došlo k rekurzi hašování nebo ukončení hashování (hash bailout).

Rekurze hashu nastává, když vstup sestavení nezapadne do dostupné paměti, což vede k rozdělení vstupu do více oddílů, které jsou zpracovávány samostatně. Pokud se některá z těchto partition stále nevejde, je rozdělena na podpartitiony, které jsou také zpracovávány samostatně. Tento proces rozdělení pokračuje, dokud se každá partition nevejde, nebo dokud není dosažena maximální úroveň rekurze (zobrazená ve sloupci IntegerData).

K hashovému úniku dochází, když operace hash dosáhne maximální úrovně rekurze a přesune se k alternativnímu plánu pro zpracování zbývajících rozdělených dat. Hash bailout obvykle nastává kvůli zkresleným datům.

Hash rekurze a hash bailout způsobují snížený výkon vašeho serveru. Pro odstranění nebo snížení frekvence rekurze a záchranných úseků hash udělejte jedno z následujícího:

  • Ujistěte se, že statistiky existují ve sloupcích, které se spojují nebo seskupují.

  • Pokud existují statistiky ve sloupcích, aktualizujte je.

  • Použijte jiný typ spoje. Například použijte místo toho spoj MERGE nebo LOOP, pokud je to vhodné.

  • Zvyšte dostupnou paměť v počítači. Hash rekurze nebo bailout nastává, když není dostatek paměti pro zpracování dotazů na místě a je potřeba je přenést na disk.

Vytvoření nebo aktualizace statistik ve sloupci zapojeném do join je nejefektivnější způsob, jak snížit počet rekurze nebo záchranných útoků, které se vyskytují.

Poznámka:

Termíny grace hash join a rekurzivní hash join se také používají k popisu hash bailoutu.

Důležité

Abyste zjistili, kde se událost Hash Warning vyskytuje, když optimalizátor dotazu generuje plán vykonání, měli byste také v trace získat třídu události Showplan. Můžete si vybrat jakoukoli z tříd událostí Showplan kromě tříd Showplan Text a Showplan Text (Unencoded), které nevrací ID uzlu. ID uzlů v Showplanech identifikují každou operaci, kterou optimalizátor dotazu provede při generování plánu provádění dotazu. Tyto operace se nazývají operátory a každý operátor v Showplanu má ID uzlu. Sloupec ObjectID pro události varování před hashem odpovídá ID Node v Showplans, takže můžete určit, který operátor nebo operace způsobuje chybu.

Sloupce datových tříd událostí varování před hashem

Název datového sloupce Datový typ Description ID sloupce Filtrovatelný
ApplicationName nvarchar Název klientské aplikace, která vytvořila připojení k instanci SQL Serveru. Tento sloupec je vyplněn hodnotami předávanými aplikací, nikoli zobrazeným názvem programu. 10 Ano
ClientProcessID int ID přiřazené hostitelským počítačem procesu, ve kterém je klientská aplikace spuštěná. Tento datový sloupec se vyplní, pokud klient poskytne ID klientského procesu. 9 Ano
DatabaseID int ID databáze specifikované příkazem USE database nebo výchozí databáze, pokud pro danou instanci nebyl vydán žádný příkaz USE databáze . SQL Server Profiler zobrazí název databáze, pokud je datový sloupec ServerName zachycen v trasování a server je k dispozici. Pomocí funkce DB_ID určete hodnotu databáze. 3 Ano
DatabaseName nvarchar Název databáze, ve které je spuštěný uživatelský příkaz. 35 Ano
EventClass int Typ události = 55. 27 Ne
Sekvence událostí int Posloupnost dané události v rámci požadavku 51 Ne
EventSubClass int Typ podtřídy události.

0=Rekurze

1=Záchrana
21 Ano
GroupID int ID skupiny úloh, ve které se aktivuje událost trasování SQL. 66 Ano
Název hostitele nvarchar Název počítače, na kterém je klient spuštěný. Tento datový sloupec se vyplní, pokud klient zadá hostitelské jméno. Pro určení názvu hostitele použijte funkci HOST_NAME. 8 Ano
IntegerData int Úroveň rekurze (pouze hash rekurze). 25 Ano
IsSystem int Určuje, jestli došlo k události v systémovém procesu nebo uživatelském procesu. 1 = systém, 0 = uživatel. 60 Ano
Přihlašovací jméno nvarchar Název přihlášení uživatele (buď SQL Server Security Login, nebo přihlašovací údaje Windows ve formě <DOMAIN>\<username>). 11 Ano
LoginSid image Identifikační číslo zabezpečení (SID) přihlášeného uživatele. Tyto informace najdete v zobrazení sys.server_principals katalogu. Každý identifikátor SID je jedinečný pro každé přihlášení na serveru. 41 Ano
NTDomainName nvarchar Doména Systému Windows, do které uživatel patří. 7 Ano
NTUserName nvarchar Uživatelské jméno systému Windows. 6 Ano
Identifikátor objektu (ObjectID) int ID uzlu kořene hashovacího týmu zapojeného do repartition. Odpovídá ID uzlu v Showplans. 22 Ano
ID požadavku int ID požadavku, který obsahuje tento výkaz. 49 Ano
Název serveru nvarchar Název instance SQL Serveru, která je sledována. 26
SessionLoginName nvarchar Přihlašovací jméno uživatele, který relaci pochází. Například pokud se připojíte ke SQL Serveru pomocí Login1 a vykonáte příkaz jako Login2, SessionLoginName ukáže Login1 a LoginName Login2. Tento sloupec zobrazuje přihlášení k SQL Serveru i Windows. 64 Ano
SPID int ID relace, na které došlo k události. 12 Ano
StartTime datetime Čas, kdy událost začala, pokud je k dispozici. 14 Ano
TransactionID bigint ID transakce přiřazené systémem. 4 Ano
XactSequence bigint Token, který popisuje aktuální transakci. 50 Ano

Viz také

sp_trace_setevent (Transact-SQL)
Připojuje