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 opNO_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
.
- Stel de
- 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
uwCREATE EVENT SESSION
ofALTER 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 demaster
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
enALTER
instructies voor gebeurtenissessies vermindert u de hoeveelheid geheugen die u opgeeft in deMAX_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.