Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná 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 |