Třída události přetečení systému Exchange

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

Třída událostí Exchange Pill označuje, že komunikační buffery v paralelním plánu dotazů byly dočasně zapsány do databáze tempdb . To se stává zřídka a pouze tehdy, když má plán dotazu více skenů rozsahu.

Obvykle má Transact-SQL dotaz, který generuje takové rozsahové skeny, mnoho operátorů BETWEEN (meziobrazových), z nichž každý vybírá rozsah řádků z tabulky nebo indexu. Alternativně můžete získat více rozsahů pomocí výrazů jako (T.a > 10 A T.a < 20) NEBO (T.a > 100 A T.a < 120). Navíc plány dotazů musí vyžadovat, aby tyto rozsahy byly procházeny v pořadí, buď proto, že na T.a je klauzule ORDER BY, nebo protože iterátor v rámci plánu vyžaduje, aby tyto n-tice spotřebovával v seřazeném pořadí.

Když má plán dotazu pro takový dotaz více operátorů paralelismu , paměťové komunikační buffery používané operátory paralelismu se naplní a může nastat situace, kdy se postup provádění dotazu zastaví. V této situaci jeden z operátorů paralelismu zapisuje svůj výstupní buffer do tempdb (operace nazývaná exchange spill), aby mohl spotřebovávat řádky z některých svých vstupních bufferů. Nakonec jsou rozlité řádky vráceny spotřebiteli, když je ten připraven je spotřebovat.

Velmi zřídka může v rámci stejného plánu vykonávání dojít k více únikům výměny, což způsobí pomalé provádění dotazu. Pokud si všimnete více než pěti přehazení během provádění stejného plánu dotazů, kontaktujte svého odborníka na podporu.

Úniky výměn jsou někdy přechodné a mohou zmizet s změnou rozložení dat.

Existuje několik způsobů, jak se vyhnout únikům výměn:

  • Vynechte klauzuli ORDER BY, pokud nepotřebujete, aby byla výsledná sada uspořádána.

  • Pokud je vyžadováno ORDER BY, odstraňte sloupec, který se účastní vícenásobných skenů vzdálenosti (T.a v příkladu výše) z klauzule ORDER BY.

  • Pomocí indexové nápovědy donutit optimalizátor použít jinou přístupovou cestu v dané tabulce.

  • Přepiš dotaz tak, aby vznikl jiný plán provádění dotazu.

  • Vynuťte sériové provedení dotazu přidáním možnosti MAXDOP = 1 na konec operace dotazu nebo indexu. Pro více informací viz Konfigurace maximálního stupně paralelismu v Konfiguraci serveru a Konfigurace paralelních indexových operací.

Důležité

Abychom zjistili, kde se událost Exchange Pill odehrává při generování plánu provádění dotazu, měli byste také v trace shromáždit třídu události Showplan. Můžete si vybrat jakoukoli z tříd událostí Showplan kromě tříd Showplan Texta 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 Exchange Spill události odpovídá ID Node v Showplans, takže můžete určit, který operátor nebo operace způsobuje chybu.

Sloupce tříd tříd událostí výměny

Název datového sloupce Datový typ Description ID sloupce Filtrovatelný
Název aplikace nvarchar Název klientské aplikace, která vytvořila připojení k instanci SQL Serveru. Tento sloupec se naplní hodnotami předanými aplikací místo zobrazovaného názvu 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 zobrazuje název databáze, pokud je sloupec dat ServerName zachycen v trace a server je dostupný. 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 = 127. 27 Ne
EventSequence int Posloupnost dané události v rámci požadavku 51 Ne
EventSubClass int Typ podtřídy události.

1=Začátek úniku

2=Konec úniku
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
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řihlásit se 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 tabulce sysloginshlavní databáze . 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
ObjectID int Systémově přiřazené ID objektu. Odpovídá ID uzlu v Showplans. 22 Ano
RequestID int ID požadavku obsahujícího příkaz. 49 Ano
název serveru nvarchar Název instance systému SQL Server, která se trasuje. 26 Ne
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
Počáteční čas 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