Utforska utökade händelser
Den utökade händelsemotorn i Azure SQL är ett enkelt och kraftfullt övervakningssystem som gör att du kan samla in detaljerad information om aktivitet i dina databaser och servrar. Med övervakningslösningarna på Azure-plattformen kan du enkelt konfigurera kraftfull övervakning för din miljö och tillhandahålla automatiserade svar på feltillstånd.
Utökade händelser bygger på funktionerna i SQL Server Profiler genom att du kan spåra frågor och genom att exponera ytterligare data (händelser) som du kan övervaka. Några exempel på problem som du kan felsöka med Extended Events är:
- Felsöka prestandaproblem med blockering och dödläge.
- Identifiera långvariga frågor.
- Övervaka DDL-åtgärder (Data Definition Language).
- Loggning av kolumnstatistik som saknas.
- Observera minnesbelastning i databasen.
- Långvariga fysiska I/O-åtgärder.
Med det utökade händelseramverket kan du också använda filter för att begränsa mängden data som du samlar in för att minska kostnaderna för datainsamling, och gör det enklare att identifiera prestandaproblemet genom att fokusera på specifika områden.
Nedan visas ett exempel på en utökad händelsesession som skapats i Azure SQL Database:
I bilden ovan är xe_deadlocks namnet på en utökad händelsesession som körs i AdventureWorks-databasen (till vänster i bilden). Den event_counter målnoden, som finns under din händelsesessionsnod, räknar antalet förekomster av varje händelse i händelsesessionen. Om du vill visa måldata i SSMS Object Explorer kan du högerklicka på målnoden och sedan välja Visa måldata. SSMS visar data som vi ser till vänster i bilden och antalet resultat för varje händelse.
Mer information om utökade händelser i Azure SQL Database finns i Utökade händelser i Azure SQL Database.
Vad kan jag övervaka med utökade händelser?
Utökade händelser täcker hela ytan för SQL Server och är indelade i fyra kanaler, som definierar målgruppen för en händelse.
- Administratör – Administratörshändelser är riktade till slutanvändare och administratörer. De händelser som ingår indikerar ett problem i en väldefinierad uppsättning åtgärder som en administratör kan vidta. Ett exempel på detta är genereringen av en XML-dödlägerapport som hjälper till att identifiera rotorsaken till dödläget.
- Drift – Drifthändelser används för analys och diagnostik eller vanliga problem. Dessa händelser kan användas för att utlösa en åtgärd eller uppgift baserat på en förekomst av händelsen. Ett exempel på en driftshändelse skulle vara en databas i ett ändringstillstånd för tillgänglighetsgruppen, vilket skulle tyda på en redundansväxling.
- Analys – Analyshändelser är vanligtvis relaterade till prestandahändelser och publiceras i hög volym. Spårning av lagrad procedur eller frågekörning är ett exempel på en analyshändelse.
- Felsökning – Felsökningshändelser är inte nödvändigtvis helt dokumenterade och du bör bara använda dem vid felsökning tillsammans med Microsoft-support.
Händelser läggs till i sessioner som kan vara värdar för flera händelser. Vanligtvis grupperas flera händelser tillsammans i en session för att samla in en relaterad uppsättning information.
Du kan köra frågan nedan för att hämta en lista över tillgängliga händelser, åtgärder och mål:
SELECT
obj.object_type,
pkg.name AS [package_name],
obj.name AS [object_name],
obj.description AS [description]
FROM sys.dm_xe_objects AS obj
INNER JOIN sys.dm_xe_packages AS pkg ON pkg.guid = obj.package_guid
WHERE obj.object_type in ('action', 'event', 'target')
ORDER BY obj.object_type,
pkg.name,
obj.name;
Skapa extended events-session
Nedan visas den grundläggande processen för att skapa en utökad händelsesession med hjälp av dialogrutan Ny session från SQL Server Management Studio. Du kan komma till den här skärmen genom att expandera noden Hantering i SSMS, expandera noden Utökade händelser, högerklicka på Sessioner och välja Ny session.
Bilden ovan visar dialogrutan Ny session för funktionen för utökade händelser. Du måste först namnge sessionen. SQL Server innehåller flera mallar som är grupperade i följande kategorier:
- Lås och block
- Profilerekvivalenter
- Frågekörning
- Systemövervakning
Med de här fördefinierade mallarna kan du snabbt komma igång med att använda utökade händelser för övervakning. I det här exemplet visas händelser som läggs till manuellt i sessionen för att vägleder dig genom alla alternativ, men när du kommer igång kan det vara ett enkelt sätt att skapa en grundläggande session med hjälp av en mall.
Du har ett par kryssrutealternativ för när du ska starta den här sessionen. Du kan välja att starta den nya sessionen när servern startar, och du kan också välja att starta sessionen så snart den har skapats. Administratörer kan starta och stoppa utökade händelsesessioner när som helst via noden Extended Events i SQL Server Management Studio. Du har också möjlighet att aktivera kausalitetsspårning, vilket lägger till en globalt unik identifierare (GUID) och sekvensnummer till utdata för varje händelse, vilket gör att du enkelt kan gå igenom ordningen som händelserna inträffade i.
Bilden ovan visar skärmen där du lägger till händelserna i sessionen. En händelse representerar en intressepunkt i koden för databasmotorn – dessa kan representera rent interna systemåtgärder, eller så kan de associeras med användaråtgärder som frågekörning. I exemplet ovan kan du se att händelserna sp_statement_completed
, sql_batch_completed
och sql_statement_completed
har lagts till i den här händelsesessionen. Som standard skulle den här sessionen samla in alla instanser av dessa händelser som äger rum på din instans. Du kan begränsa samlingen genom att klicka på knappen Konfigurera.
Händelsekonfigurationsskärmen gör det möjligt att definiera vilka data du samlar in när det gäller dina händelser. Med globala fält kan du välja de data som du samlar in när händelsen inträffar. Globala fält kallas även åtgärder eftersom åtgärden är att lägga till ytterligare datafält i händelsen. De här fälten representerar de data som samlas in när den utökade händelsen inträffar och är vanliga för de flesta utökade händelser. Bilden nedan visar filteralternativen för en utökad händelse.
Filter är en kraftfull funktion i Extended Events som gör att du kan använda detaljerad kontroll för att endast samla in de specifika förekomsterna av händelsen som du vill samla in. I det här exemplet kan du se att filtret tillämpas på fältet sqlserver.is_system
där det är lika med noll, vilket indikerar att frågan inte är en intern åtgärd. Med andra ord samlar sessionen inte in slutförande av instruktioner som skickas av systemanslutningar, och vi vill bara samla in instruktioner som skickas av användare eller användarprogram.
Filter gäller för ett enda fält för en enskild händelse. Om du vill se till att du inte spårar systemaktiviteter för några händelser behöver du ett separat filter för varje: för sql_statement_completed
händelsen, för sql_batch_completed
händelsen och för sp_statement_completed
händelsen.
Det är bra att konfigurera ett filter för varje händelse som du samlar in. Detta hjälper till att förbättra effektiviteten i datainsamlingen och gör att du kan begränsa sökningens fokus.
Bilden nedan visar de händelsefält som samlas in. Dessa är specifika för händelsen som utlöses och kan innehålla valfria fält för insamling. I händelsen ovan kan du se att de valfria samlingsalternativen är statement
, och parameterized_plan_handle
.
När du har definierat en händelsesession definierar du ett lagringsmål enligt bilden nedan.
En utökad händelsesession har ett mål – ett mål kan bara ses som en plats där motorn kan hålla reda på förekomster av en händelse. Två av de vanligaste målen är händelsefilen som är en fil i filsystemet som kan lagra händelser, och i Azure SQL PaaS skrivs dessa data till en bloblagring. Ett annat vanligt mål är ringbufferten som finns i SQL Server-minnet. Ringbufferten används oftast för liveobservation av en händelsesession eftersom det är en cirkulär buffert och data inte sparas utanför en session. De flesta mål bearbetar data asynkront, vilket innebär att händelsedata skrivs till minnet innan de sparas på disken. Undantaget är ETW-mål (Event Tracing for Windows Target) och Event Counter-mål som bearbetas synkront.
Följande tabell innehåller information och används för varje typ av extended events-mål.
Mål | Beskrivning | Bearbetning |
---|---|---|
Händelseräknare | Räknar alla händelser som inträffade under en extended event-session. Detta används för att hämta information om arbetsbelastningsegenskaper om en arbetsbelastning utan att behöva använda en fullständig händelsesamling. | Synkront |
Händelsefil | Skriver händelsesessionens utdata från minnet till en beständig fil på disken. | Asynkron |
Händelseparkoppling | Många händelser som vanligtvis inträffar i par (t.ex. låshämtning, låsversion) och den här samlingen kan användas för identitet när dessa händelser inte inträffar i en matchad uppsättning. | Asynkron |
Händelsespårning för Windows (ETW) | Används för att korrelera SQL Server-händelser med Windows OS-händelsedata. | Synkront |
Histogram | Detta liknar händelseräknaren, som räknar förekomster av en händelse. Skillnaden är att histogrammet kan räknas baserat på en specifik händelsekolumn eller åtgärd. | Asynkron |
Ringbuffert | Används för att lagra data i minnet. Data sparas inte på disken och kanske rensas ofta från bufferten | Asynkron |
Du kan också skapa en utökad händelsesession med hjälp av T-SQL. Följande T-SQL-kommandon ger ett exempel på hur du skapar en utökad händelsesession:
IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name='test_session')
DROP EVENT session test_session ON SERVER;
GO
CREATE EVENT SESSION test_session
ON SERVER
ADD EVENT sqlos.async_io_requested,
ADD EVENT sqlserver.lock_acquired
ADD TARGET package0.etw_classic_sync_target (SET default_etw_session_logfile_path = N'C:\demo\traces\sqletw.etl' )
WITH (MAX_MEMORY=4MB, MAX_EVENT_SIZE=4MB);
GO
Händelsesessioner kan begränsas till en server eller en databas. I exemplet ovan lägger du till två händelser och använder sökvägen Händelsespårning för Windows (ETW) med en filplats. När du har skapat sessionen måste du starta den. Du kan göra detta via T-SQL och ALTER
sessionen med hjälp av STATE
alternativet, eller så kan du använda SQL Server Management Studio för det.