Byt Läckagehändelseklass

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Exchange Spill-händelseklassen indikerar att kommunikationsbuffertar i en parallell frågeplan tillfälligt har skrivits till tempdb-databasen . Detta sker sällan och endast när en frågeplan har flera intervallskanningar.

Normalt har den Transact-SQL fråga som genererar sådana intervallsskanningar många BETWEEN-operatorer, där varje rad väljer ett radintervall från en tabell eller ett index. Alternativt kan du erhålla flera intervall med uttryck som (T.a > 10 OCH T.a < 20) ELLER (T.a > 100 OCH T.a < 120). Dessutom måste frågeplanerna kräva att dessa intervall skannas i ordning, antingen för att det finns en ORDER BY-klausul på T.a, eller för att en iterator inom planen kräver att den konsumerar tuplerna i sorterad ordning.

När en frågeplan för en sådan fråga har flera Parallelism-operatorer blir minneskommunikationsbuffertarna som används av Parallelismoperatorerna fulla, och en situation kan uppstå där förfrågarens exekveringsprocess upphör. I denna situation skriver en av parallellismoperatorerna sin utgångsbuffert till tempdb (en operation kallad utbyte) så att den kan konsumera rader från några av sina indatabuffertar. Så småningom återlämnas de spillda raderna till konsumenten när konsumenten är redo att konsumera dem.

Mycket sällan kan flera utbytesspill inträffa inom samma exekveringsplan, vilket gör att frågan körs långsamt. Om du märker fler än fem läcka i samma programs genomförande, kontakta din supportexpert.

Börsutsläpp är ibland övergående och kan försvinna när datadistributionen förändras.

Det finns flera sätt att undvika utsläpp i utbyten:

  • Ta bort ORDER BY-klausulen om du inte behöver att resultatuppsättningen är ordnad.

  • Om ORDER BY krävs, ta bort kolumnen som deltar i de multipla räckviddsskanningarna (T.a i exemplet ovan) från ORDER BY-klausulen.

  • Med hjälp av en index-ledtråd tvingar optimeraren att använda en annan åtkomstväg i den aktuella tabellen.

  • Skriv om frågan för att skapa en annan plan för utförseln.

  • Tvinga seriell exekvering av frågan genom att lägga till alternativet MAXDOP = 1 i slutet av fråge- eller indexoperationen. För mer information, se Konfigurera maximal grad av parallellism Serverkonfigurationsalternativ och Konfigurera parallella indexoperationer.

Viktigt!

För att avgöra var Exchange Spill-händelsen inträffar när frågeoptimeraren genererar en exekveringsplan, bör du också samla in en Showplan-händelseklass i spårningen. 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. ObjectID-kolumnen för Exchange Spill-händelser motsvarar nod-ID:t i Showplans så att du kan avgöra vilken operatör eller operation som orsakar felet.

Data kolumner för Utbyteshändelsens klass

Namn på datakolumn Datatyp Description Kolumn-ID Filtrerbar
ApplicationName nvarchar Namnet på klientprogrammet som skapade anslutningen till en instans av SQL Server. Den här kolumnen fylls i med de värden som skickas av programmet i stä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 om klienten tillhandahåller klientens process-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 kolumnen ServerName-data fångas i spåret 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 = 127. 27 Nej
EventSequence int Sekvens av en viss händelse i begäran. 51 Nej
EventSubClass int Typ av händelseunderklass.

1=Spill börjar

2=Spill-slut
21 Yes
GroupID int ID för arbetsbelastningsgruppen där SQL Trace-händelsen utlöses. 66 Yes
HostName 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
IsSystem int Anger om händelsen inträffade i en systemprocess eller en användarprocess. 1 = system, 0 = användare. 60 Yes
LoginName 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 hittar denna information i syslogins-tabellen i huvuddatabasen . 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 int Systemtilldelat ID för objektet. Motsvarar nod-ID i Showplans. 22 Yes
RequestID int ID för begäran som innehåller -instruktionen. 49 Yes
ServerName nvarchar Namn på den instans av SQL Server som spåras. 26 Nej
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
TransaktionsID bigint Systemtilldelat ID för transaktionen. 4 Yes
XactSequence bigint Token som beskriver den aktuella transaktionen. 50 Yes

Se även

sp_trace_setevent (Transact-SQL)
Ange Indexalternativ
ALTERINDEX (Transact-SQL)