Uitgebreide gebeurtenissen in Azure SQL Database en Azure SQL Managed Instance

Van toepassing op: Azure SQL DatabaseAzure SQL Managed Instance

Zie voor een inleiding tot uitgebreide gebeurtenissen:

De functieset, functionaliteit en gebruiksscenario's voor uitgebreide gebeurtenissen in Azure SQL Database en Azure SQL Managed Instance zijn vergelijkbaar met wat beschikbaar is in SQL Server. De belangrijkste verschillen zijn:

  • Het event_file doel maakt altijd gebruik van blobs in Azure Storage, in plaats van bestanden op schijf.
  • In Azure SQL Database zijn gebeurtenissessies altijd databasebereik. Dit betekent dat:
    • Een gebeurtenissessie in de ene database kan geen gebeurtenissen uit een andere database verzamelen.
    • Een gebeurtenis moet plaatsvinden in de context van een gebruikersdatabase die in een sessie moet worden opgenomen.
  • In Azure SQL Managed Instance kunt u zowel server- als databasegebereikte gebeurtenissessies maken. Voor de meeste scenario's raden we u aan om gebeurtenissessies met serverbereik te gebruiken.

Aan de slag

Er zijn twee voorbeelden waarmee u snel aan de slag kunt met uitgebreide gebeurtenissen in Azure SQL Database en Azure SQL Managed Instance:

  • Maak een sessie met een event_file doel in Azure Storage. In dit voorbeeld ziet u hoe u gebeurtenisgegevens kunt vastleggen in een bestand (blob) in Azure Storage met behulp van het event_file doel. Gebruik deze optie als u vastgelegde gebeurtenisgegevens wilt behouden of als u logboeken wilt gebruiken in SQL Server Management Studio (SSMS) om vastgelegde gegevens te analyseren.
  • Maak een sessie met een ring_buffer doel in het geheugen. In dit voorbeeld ziet u hoe u de meest recente gebeurtenissen van een gebeurtenissessie in het geheugen vastlegt met behulp van het ring_buffer doel. Gebruik dit als een snelle manier om recente gebeurtenissen te bekijken tijdens ad-hoconderzoeken of probleemoplossing, zonder dat u vastgelegde gebeurtenisgegevens hoeft op te slaan.

Uitgebreide gebeurtenissen kunnen worden gebruikt om alleen-lezen replica's te bewaken. Zie Leesquery's op replica's voor meer informatie.

Aanbevolen procedures

Gebruik de volgende aanbevolen procedures voor het gebruik van uitgebreide gebeurtenissen in Azure SQL Database en Azure SQL Managed Instance op betrouwbare wijze en zonder dat dit van invloed is op de status en prestaties van de database-engine.

  • Als u het event_file doel gebruikt:
    • Stel de EVENT_RETENTION_MODE optie niet in op NO_EVENT_LOSS. Dit kan leiden tot time-outs van verbindingen en failoververtragingen onder andere, wat van invloed is op de beschikbaarheid van databases of beheerde exemplaren.
    • Gebruik een opslagaccount in dezelfde Azure-regio als de database of het beheerde exemplaar waarin u gebeurtenissessies maakt.
    • Lijn de redundantie van het opslagaccount af met de redundantie van de database, elastische pool of het beheerde exemplaar. Gebruik LRS, GRS of RA-GRS voor lokaal redundante resources. Gebruik ZRS, GZRS of RA-GZRS voor zone-redundante resources. Zie Azure Storage-redundantie voor meer informatie.
    • Gebruik geen andere blobtoegangslaag dan Hot.
  • Als u een continu actieve gebeurtenissessie wilt maken die automatisch wordt gestart nadat elke database-engine opnieuw is opgestart (bijvoorbeeld na een failover of een onderhoudsbeurt), neemt u de optie gebeurtenissessie op in STARTUP_STATE = ON uw CREATE EVENT SESSION of ALTER EVENT SESSION instructies.
  • Gebruik daarentegen STARTUP_STATE = OFF voor korte-termijngebeurtenissessies, zoals sessies die worden gebruikt bij ad-hoc probleemoplossing.
  • Lees in Azure SQL Database geen impassegebeurtenissen uit de ingebouwde dl gebeurtenissessie. Als er een groot aantal impassegebeurtenissen is verzameld, kan het lezen ervan met de functie sys.fn_xe_file_target_read_file() een fout in het geheugen in de master database veroorzaken. Dit kan van invloed zijn op de verwerking van aanmeldingen en leiden tot een storing in een toepassing. Zie Impassegrafieken verzamelen in Azure SQL Database met uitgebreide gebeurtenissen voor de aanbevolen manieren om impasses te bewaken.

Doelen voor gebeurtenissessies

Azure SQL Database en Azure SQL Managed Instance ondersteunen de volgende doelen:

  • event_file doel. Schrijft volledige buffers naar een blob in een Azure Storage-container.
  • ring_buffer doel. Bevat gebeurtenisgegevens in het geheugen totdat deze worden vervangen door nieuwe gebeurtenisgegevens.
  • event_counter doel. Telt alle gebeurtenissen die plaatsvinden tijdens een uitgebreide gebeurtenissessie.
  • histogramdoel . Telt het aantal exemplaren van verschillende waarden van velden of acties in afzonderlijke buckets.
  • event_stream. Streamt gebeurtenisgegevens naar een .Net-toepassing.

Notitie

Het event_stream doel in Azure SQL Database en Azure SQL Managed Instance is in preview.

Verschillen Transact-SQL

Wanneer u de instructie CREATE EVENT SESSION, ALTER EVENT SESSION en DROP EVENT SESSION uitvoert in SQL Server en in Azure SQL Managed Instance, gebruikt u de ON SERVER component. In Azure SQL Database gebruikt u in plaats daarvan de ON DATABASE component, omdat in Azure SQL Database-gebeurtenissessies databasebereik hebben.

Weergaven van uitgebreide gebeurtenissencatalogus

Uitgebreide gebeurtenissen bieden verschillende catalogusweergaven. Catalogusweergaven vertellen u over metagegevens of definities van gebeurtenissessies. Deze weergaven retourneren geen informatie over exemplaren van actieve gebeurtenissessies.

Naam van catalogusweergave Beschrijving
sys.database_event_session_actions Retourneert een rij voor elke actie voor elke gebeurtenis van een gebeurtenissessie.
sys.database_event_session_events Retourneert een rij voor elke gebeurtenis in een gebeurtenissessie.
sys.database_event_session_fields Retourneert een rij voor elke aangepaste kolom die expliciet is ingesteld voor gebeurtenissen en doelen.
sys.database_event_session_targets Retourneert een rij voor elk gebeurtenisdoel voor een gebeurtenissessie.
sys.database_event_sessions Retourneert een rij voor elke gebeurtenissessie in de database.

Dynamische beheerweergaven voor uitgebreide gebeurtenissen

Uitgebreide gebeurtenissen bieden verschillende dynamische beheerweergaven (DMV's). DMV's retourneren informatie over gestarte gebeurtenissessies.

Naam van DMV Beschrijving
sys.dm_xe_database_session_event_actions Retourneert informatie over gebeurtenissessieacties.
sys.dm_xe_database_session_events Retourneert informatie over sessie-gebeurtenissen.
sys.dm_xe_database_session_object_columns Geeft de configuratiewaarden weer voor objecten die zijn gebonden aan een sessie.
sys.dm_xe_database_session_targets Retourneert informatie over sessiedoelen.
sys.dm_xe_database_sessions Retourneert een rij voor elke gebeurtenissessie die wordt uitgevoerd in de huidige database.

Algemene DMV's

Er zijn extra DMV's voor uitgebreide gebeurtenissen die gebruikelijk zijn voor Azure SQL Database, Azure SQL Managed Instance en SQL Server:

Beschikbare gebeurtenissen, acties en doelen

Net als in SQL Server kunt u beschikbare gebeurtenissen, acties en doelen verkrijgen met behulp van deze query:

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;

Bevoegdheden

In Azure SQL Database en Azure SQL Managed Instance ondersteunen uitgebreide gebeurtenissen een gedetailleerd machtigingsmodel. De volgende machtigingen kunnen worden verleend:

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

Zie GEBEURTENISSESSIE MAKEN, ALTER EVENT SESSION en DROP EVENT SESSION voor meer informatie over wat elk van deze machtigingen bepaalt.

Al deze machtigingen zijn opgenomen in de machtiging voor de database of het CONTROL beheerde exemplaar. In Azure SQL Database hebben de database-eigenaar (dbo), leden van de db_owner databaserol en de beheerders van de logische server de databasemachtiging CONTROL . In Azure SQL Managed Instance hebben leden van de sysadmin serverfunctie de CONTROL machtiging voor het exemplaar.

Autorisatie en beheer van opslagcontainers

Wanneer u het event_file doel gebruikt, worden gebeurtenisgegevens opgeslagen in blobs in een Azure Storage-container. De database-engine waarop de gebeurtenissessie wordt uitgevoerd, moet specifieke toegang hebben tot deze container. U verleent deze toegang door een SAS-token voor de container te maken en het token op te slaan in een referentie.

In Azure SQL Database moet u een referentie voor databasebereik gebruiken. Gebruik in Azure SQL Managed Instance een referentie met serverbereik.

Het SAS-token dat u voor uw Azure Storage-container maakt, moet voldoen aan de volgende vereisten:

  • rwl De machtigingen (Read, Write, List) hebben.
  • De begin- en verlooptijd hebben die de levensduur van de gebeurtenissessie omvat.
  • Geen IP-adresbeperkingen.

Resourcebeheer

In Azure SQL Database wordt geheugenverbruik door uitgebreide gebeurtenissessies dynamisch beheerd door de database-engine om conflicten tussen resources te minimaliseren.

Er is een limiet voor het geheugen dat beschikbaar is voor gebeurtenissessies:

  • In één database is het totale sessiegeheugen beperkt tot 128 MB.
  • In een elastische pool worden afzonderlijke databases beperkt door de limieten voor individuele databases en in totaal kunnen ze niet groter zijn dan 512 MB.

Als u een foutbericht ontvangt dat verwijst naar een geheugenlimiet, zijn de corrigerende acties die u kunt ondernemen:

  • Voer minder gelijktijdige gebeurtenissessies uit.
  • Met behulp van CREATE en ALTER instructies voor gebeurtenissessies vermindert u de hoeveelheid geheugen die u opgeeft in de MAX_MEMORY component voor de sessie.

Notitie

In uitgebreide gebeurtenissen wordt de component weergegeven in twee contexten: bij het MAX_MEMORY maken of wijzigen van een sessie (op sessieniveau) en bij het gebruik van het ring_buffer doel (op doelniveau). De bovenstaande limieten gelden voor het geheugen op sessieniveau.

Er is een limiet voor het aantal gestarte gebeurtenissessies in Azure SQL Database:

  • In één database is de limiet 100.
  • In een elastische pool is de limiet 100 sessies binnen het databasebereik per pool.

In dichte elastische pools kan het starten van een nieuwe uitgebreide gebeurtenissessie mislukken vanwege geheugenbeperkingen, zelfs als het totale aantal gestarte sessies lager is dan 100.

Als u het totale geheugen wilt vinden dat door een gebeurtenissessie wordt verbruikt, voert u de volgende query uit terwijl deze is verbonden met de database waar de gebeurtenissessie wordt gestart:

SELECT name AS session_name,
       total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;

Als u het totale geheugen van de gebeurtenissessie voor een elastische pool wilt vinden, moet deze query worden uitgevoerd in elke database in de pool.