Utökade händelser i Azure SQL Database och Azure SQL Managed Instance
Gäller för:Azure SQL DatabaseAzure SQL Managed Instance
En introduktion till Utökade händelser finns i:
Scenarier för funktionsuppsättningar, funktioner och användning för utökade händelser i Azure SQL Database och Azure SQL Managed Instance liknar det som är tillgängligt i SQL Server. De största skillnaderna är:
- Målet
event_file
använder alltid blobar i Azure Storage i stället för filer på disk. - I Azure SQL Database är händelsesessioner alltid databasomfattande. Det innebär att:
- En händelsesession i en databas kan inte samla in händelser från en annan databas.
- En händelse måste inträffa i kontexten för en användardatabas för att ingå i en session.
- I Azure SQL Managed Instance kan du skapa både serveromfattande och databasomfattande händelsesessioner. Vi rekommenderar att du använder händelsesessioner med serveromfattning för de flesta scenarier.
Kom igång
Det finns två exempel som hjälper dig att komma igång med utökade händelser i Azure SQL Database och Azure SQL Managed Instance snabbt:
- Skapa en session med ett event_file mål i Azure Storage. Det här exemplet visar hur du samlar in händelsedata i en fil (blob) i Azure Storage med hjälp av
event_file
målet. Använd detta om du behöver spara insamlade händelsedata, eller om du vill använda loggboken i SQL Server Management Studio (SSMS) för att analysera insamlade data. - Skapa en session med ett ring_buffer mål i minnet. Det här exemplet visar hur du avbildar de senaste händelserna från en händelsesession i minnet med hjälp av
ring_buffer
målet. Använd detta som ett snabbt sätt att titta på de senaste händelserna under ad hoc-undersökningar eller felsökning, utan att behöva lagra insamlade händelsedata.
Utökade händelser kan användas för att övervaka skrivskyddade repliker. Mer information finns i Läsa frågor om repliker.
Bästa praxis
Använd följande metodtips för att använda utökade händelser i Azure SQL Database och Azure SQL Managed Instance på ett tillförlitligt sätt och utan att påverka databasmotorns hälsotillstånd och arbetsbelastningsprestanda.
- Om du använder
event_file
målet:- Ställ inte in alternativet på
EVENT_RETENTION_MODE
NO_EVENT_LOSS
. Detta kan orsaka tidsgränser för anslutningar och redundansfördröjningar bland andra problem, vilket påverkar databasens eller den hanterade instansens tillgänglighet. - Använd ett lagringskonto i samma Azure-region som databasen eller den hanterade instansen där du skapar händelsesessioner.
- Justera redundansen för lagringskontot med redundansen för databasen, den elastiska poolen eller den hanterade instansen. För lokalt redundanta resurser använder du LRS, GRS eller RA-GRS. För zonredundanta resurser använder du ZRS, GZRS eller RA-GZRS. Mer information finns i Azure Storage-redundans .
- Använd inte någon annan blobåtkomstnivå än
Hot
.
- Ställ inte in alternativet på
- Om du vill skapa en händelsesession som körs kontinuerligt och som startas automatiskt efter varje omstart av
STARTUP_STATE = ON
databasmotorn (till exempel efter en redundansväxling eller en underhållshändelse), inkluderar du alternativet händelsesession i dinaCREATE EVENT SESSION
ellerALTER EVENT SESSION
-instruktioner. - Omvänt kan du använda
STARTUP_STATE = OFF
för kortsiktiga händelsesessioner, till exempel de som används i ad hoc-felsökning. - Läs inte dödlägeshändelser från den inbyggda händelsesessionen i
dl
Azure SQL Database. Om ett stort antal dödlägeshändelser samlas in kan läsning av dem med funktionen sys.fn_xe_file_target_read_file() orsaka ett out-of-memory-fel imaster
databasen. Detta kan påverka inloggningsbearbetningen och leda till ett programstopp. De rekommenderade sätten att övervaka dödlägen finns i Samla in dödlägesdiagram i Azure SQL Database med utökade händelser.
Mål för händelsesession
Azure SQL Database och Azure SQL Managed Instance stöder följande mål:
- event_file mål. Skriver fullständiga buffertar till en blob i en Azure Storage-container.
- ring_buffer mål. Innehåller händelsedata i minnet tills de ersätts av nya händelsedata.
- event_counter mål. Räknar alla händelser som inträffar under en utökad händelsesession.
- histogrammål . Räknar förekomster av olika värden för fält eller åtgärder i separata bucketar.
- event_stream. Flöden händelsedata till ett .Net-program.
Kommentar
Målet event_stream
i Azure SQL Database och Azure SQL Managed Instance är i förhandsversion.
Transact-SQL-skillnader
När du kör uttrycken CREATE EVENT SESSION, ALTER EVENT SESSION och DROP EVENT SESSION i SQL Server och i Azure SQL Managed Instance använder ON SERVER
du -satsen. I Azure SQL Database använder ON DATABASE
du satsen i stället, eftersom händelsesessionerna i Azure SQL Database är databasomfattande.
Katalogvyer för utökade händelser
Extended Events innehåller flera katalogvyer. Katalogvyer berättar om händelsesessionsmetadata eller definition. Dessa vyer returnerar inte information om instanser av aktiva händelsesessioner.
Namn på katalogvy | beskrivning |
---|---|
sys.database_event_session_actions | Returnerar en rad för varje åtgärd för varje händelse i en händelsesession. |
sys.database_event_session_events | Returnerar en rad för varje händelse i en händelsesession. |
sys.database_event_session_fields | Returnerar en rad för varje anpassad kolumn som uttryckligen har angetts för händelser och mål. |
sys.database_event_session_targets | Returnerar en rad för varje händelsemål för en händelsesession. |
sys.database_event_sessions | Returnerar en rad för varje händelsesession i databasen. |
Vyer för dynamisk hantering av utökade händelser
Extended Events innehåller flera dynamiska hanteringsvyer (DMV:er). DMV:er returnerar information om startade händelsesessioner.
Namn på DMV | beskrivning |
---|---|
sys.dm_xe_database_session_event_actions | Returnerar information om händelsesessionsåtgärder. |
sys.dm_xe_database_session_events | Returnerar information om sessionshändelser. |
sys.dm_xe_database_session_object_columns | Visar konfigurationsvärdena för objekt som är bundna till en session. |
sys.dm_xe_database_session_targets | Returnerar information om sessionsmål. |
sys.dm_xe_database_sessions | Returnerar en rad för varje händelsesession som körs i den aktuella databasen. |
Vanliga DMV:er
Det finns ytterligare DMV:er för utökade händelser som är gemensamma för Azure SQL Database, Azure SQL Managed Instance och SQL Server:
Tillgängliga händelser, åtgärder och mål
Precis som i SQL Server kan du hämta tillgängliga händelser, åtgärder och mål med hjälp av den här frågan:
SELECT o.object_type,
p.name AS package_name,
o.name AS db_object_name,
o.description AS db_obj_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE o.object_type IN ('action','event','target')
ORDER BY o.object_type,
p.name,
o.name;
Behörigheter
I Azure SQL Database och Azure SQL Managed Instance stöder Extended Events en detaljerad behörighetsmodell. Följande behörigheter kan beviljas:
CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION
Information om vad var och en av dessa behörigheter styr finns i SKAPA HÄNDELSESESSION, ÄNDRA HÄNDELSESESSION och SLÄPP HÄNDELSESESSION.
Alla dessa behörigheter ingår i behörigheten CONTROL
för databasen eller den hanterade instansen. I Azure SQL Database har databasägaren (dbo
), medlemmar i databasrollen db_owner
och administratörerna för den logiska servern databasbehörigheten CONTROL
. I Azure SQL Managed Instance har medlemmar i serverrollen sysadmin
behörigheten CONTROL
för instansen.
Auktorisering och kontroll av lagringscontainer
När du använder event_file
målet lagras händelsedata i blobar i en Azure Storage-container. Databasmotorn som kör händelsesessionen måste ha specifik åtkomst till den här containern. Du beviljar den här åtkomsten genom att skapa en SAS-token för containern och lagra token i en autentiseringsuppgift.
I Azure SQL Database måste du använda en databasomfattande autentiseringsuppgift. I Azure SQL Managed Instance använder du en autentiseringsuppgift med serveromfattning.
DEN SAS-token som du skapar för din Azure Storage-container måste uppfylla följande krav:
- Har behörigheterna
rwl
(Read
,Write
,List
) . - Ha starttid och förfallotid som omfattar händelsesessionens livslängd.
- Har inga IP-adressbegränsningar.
Resursstyrning
I Azure SQL Database styrs minnesförbrukningen av utökade händelsesessioner dynamiskt av databasmotorn för att minimera resurskonkurrensen.
Det finns en gräns för tillgängligt minne för händelsesessioner:
- I en enskild databas är det totala sessionsminnet begränsat till 128 MB.
- I en elastisk pool begränsas enskilda databaser av de enskilda databasgränserna och får totalt inte överstiga 512 MB.
Om du får ett felmeddelande som refererar till en minnesgräns kan du vidta följande åtgärder:
- Kör färre samtidiga händelsesessioner.
- Med hjälp av
CREATE
ochALTER
instruktioner för händelsesessioner minskar du mängden minne som du anger iMAX_MEMORY
-satsen för sessionen.
Kommentar
I Utökade händelser MAX_MEMORY
visas -satsen i två kontexter: när du skapar eller ändrar en session (på sessionsnivå) och när du använder ring_buffer
målet (på målnivå). Ovanstående gränser gäller för minnet på sessionsnivå.
Det finns en gräns för antalet startade händelsesessioner i Azure SQL Database:
- I en enskild databas är gränsen 100.
- I en elastisk pool är gränsen 100 databasomfattande sessioner per pool.
Om du startar en ny utökad händelsesession i kompakta elastiska pooler kan det misslyckas på grund av minnesbegränsningar även när det totala antalet påbörjade sessioner är under 100.
Om du vill hitta det totala minne som förbrukas av en händelsesession kör du följande fråga när du är ansluten till databasen där händelsesessionen startas:
SELECT name AS session_name,
total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;
För att hitta det totala händelsesessionsminnet för en elastisk pool måste den här frågan köras i varje databas i poolen.