Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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)