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.
  • 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 dina CREATE EVENT SESSION eller ALTER 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 i master 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 och ALTER instruktioner för händelsesessioner minskar du mängden minne som du anger i MAX_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.