1. Inleiding
1.1 Wat zijn SQL Server Uitgebreide evenementen?
SQL Server Extended Events is een lichtgewicht prestatiebewakingssysteem waarmee beheerders en ontwikkelaars gedetailleerde gegevens over serveractiviteit kunnen verzamelen en analyseren. Dit systeem is geïntegreerd in de SQL Server Database Engine biedt uitgebreide inzichten in zowel normale werking als probleemoplossingsscenario's.
1.2 Waarom uitgebreide gebeurtenissen gebruiken voor monitoring?
SQL Server Extended Events biedt verschillende aantrekkelijke voordelen voor databasebewaking en probleemoplossing:
- Minimale prestatie-impact met lichtgewicht architectuur
- Gedetailleerde controle over gegevensverzameling en gebeurtenisfiltering
- Aanpasbare gegevensverzameling afgestemd op specifieke monitoringbehoeften
- Mogelijkheid om gebeurtenissen uit meerdere pakketten tegelijkertijd vast te leggen
- Flexibele filtermogelijkheden om te focussen op relevante operaties
- Ondersteuning voor monitoring van productiesystemen zonder de gebruikerservaring te verslechteren
- Uitgebreide tracking van prestatiegegevens
- Geavanceerde diagnoseostic-mogelijkheden voor probleemoplossing
- Onderhoud van audittrails voor nalevingsvereisten
- Realtime- en historische data-analyseopties
1.3 Uitgebreide gebeurtenissen vs. SQL Server Profiler
Terwijl SQL Server Profiler Hoewel MS SQL Extended Events een traditionele monitoringtool is, biedt het een efficiënter alternatief. Extended Events verbruikt minder systeembronnen en biedt betere schaalbaarheid voor productieomgevingen.
SQL Server Profiler is nu verouderd en Microsoft raadt aan om voor alle bewakingsactiviteiten te migreren naar Extended Events.
2. Inzicht in de architectuur van uitgebreide gebeurtenissen
2.1 Uitgebreide gebeurtenissen Engine-componenten
De Extended Events-engine bestaat uit verschillende kerncomponenten die samenwerken om gebeurtenisgegevens te verzamelen, verwerken en opslaan. Inzicht in deze componenten helpt u bij het ontwerpen van effectieve monitoringoplossingen.
- Verzender: De dispatchercomponent coördineert de gebeurtenisstroom van gebeurtenisbronnen naar de Extended Events-engine. Wanneer een gebeurtenis wordt geactiveerd, ontvangt de dispatcher de melding en stuurt deze door naar actieve sessies die zich hebben geabonneerd op dat specifieke gebeurtenistype.
- Buffer: Buffers temporarIk sla gebeurtenisgegevens op in het geheugen voordat ik ze naar het geheugen schrijf. tarDit buffermechanisme verbetert de prestaties door I/O-bewerkingen te verminderen. Buffergrootte en beheerinstellingen kunnen worden geconfigureerd om geheugengebruik in balans te brengen met de vereisten voor gegevensvastlegging.
- Sessie: Een sessie definieert de reikwijdte van event monitoring. Het specificeert welke events vastgelegd moeten worden, welke acties uitgevoerd moeten worden, welke predicaten toegepast moeten worden en waar de resultaten opgeslagen moeten worden. Sessies kunnen aangemaakt, gewijzigd en opgeslagen worden.tarted, en stopte zelfstandig.
- TarInstantie ophalen: TarGet-instances vertegenwoordigen de opslagbestemmingen voor vastgelegde gebeurtenisgegevens. Elke sessie kan naar één of meerdere gegevens schrijven. tarkrijgt, zoals bestanden, ringbuffers of tellers. Tarhaalt het proces op en slaat de gebeurtenisinformatie op voor latere analyse.
2.2 Evenementenpakketten
SQL Server Extended Events organiseert functionaliteit in pakketten. Elk pakket bevat gerelateerde gebeurtenissen, acties, typen, predicaten en tarkrijgt. Veelvoorkomende pakketten zijn onder andere sqlserver, sqlos en package0.
- Het sqlserver-pakket biedt databasespecifieke gebeurtenissen, zoals query's en transacties.
- Het sqlos-pakket bevat gebeurtenissen van het besturingssysteem.
- package0 biedt algemene functionaliteit die in alle pakketten wordt gebruikt.
2.3 Gebeurtenistypen en velden
Gebeurtenissen vertegenwoordigen gebeurtenissen binnen SQL Server die u wilt bewaken. Elk gebeurtenistype heeft vooraf gedefinieerde velden die relevante informatie vastleggen. De gebeurtenis sql_statement_completed bevat bijvoorbeeld velden voor duur, CPU-tijd, lees- en schrijfbewerkingen.
Gebeurtenissen kunnen synchroon of asynchroon zijn. Synchrone gebeurtenissen worden geactiveerd tijdens de bewerking zelf, terwijl asynchrone gebeurtenissen na voltooiing worden geactiveerd. Inzicht in de kenmerken van gebeurtenissen helpt u bij het selecteren van de juiste gebeurtenissen voor uw monitoringbehoeften.
2.4 acties
Acties voegen supplementen toetary-informatie naar vastgelegde gebeurtenissen. Wanneer een gebeurtenis wordt geactiveerd, worden bijbehorende acties uitgevoerd om aanvullende context te verzamelen, zoals SQL-tekst, sessie-ID of informatie over de aanroepstack.
Algemene acties zijn onder meer sql_text om query-instructies vast te leggen, database_name om de database te identificeren en client_hostnaam om de oorspronkelijke server te volgen. Acties bieden essentiële context voor probleemoplossing en analyse.
2.5 Tarkrijgt
Tarbepaalt hoe en waar gebeurtenisgegevens worden opgeslagen. SQL Server Extended Events ondersteunt meerdere tarkrijg typen, waaronder:
- event_file voor schijfopslag, met permanente opslag voor gedetailleerde analyse
- ring_buffer voor geheugengebaseerde retentie, die snelle toegang biedt tot recente gebeurtenissen met minimale overhead
- event_counter voor eenvoudig tellen
- histogram voor groepering
- pair_matching voor het correleren van gerelateerde gebeurtenissen
2.6 Predicaten (filters)
Predicaten filteren gebeurtenissen op basis van opgegeven voorwaarden, waardoor de hoeveelheid vastgelegde gegevens wordt verminderd. U kunt filteren op databasenaam, applicatienaam, sessie-ID, duurdrempels of een willekeurige gebeurtenisveldwaarde.
Effectief gebruik van predicaten minimaliseert de prestatie-impact door alleen relevante gebeurtenissen vast te leggen. Complexe predicaten combineren meerdere voorwaarden met behulp van logische operatoren om nauwkeurige filtercriteria te creëren.
3. Uitgebreide gebeurtenissessiestatussen en levenscyclus
3.1 Sessiestatussen: CREATE, ALTER en DROP
Uitgebreide evenementsessies doorlopen verschillende statussen:
- De CREATE EVENT SESSION-instructie definieert een nieuwe sessie, maartart it. De sessie bevindt zich in een gestopte toestand totdat deze expliciet wordt geactiveerd.
- De ALTER EVENT SESSION-instructie wijzigt de sessieconfiguratie of verandert de status tussen gestopt en started.
- Met de instructie DROP EVENT SESSION verwijdert u de sessiedefinitie volledig van de server.
3.2 Sessie-inhoud en kenmerken
Elke sessie bevat een verzameling gebeurtenissen, acties, tarkrijgt en predicaten. Sessies hebben impliciete grenzen die hun bereik en gedrag definiëren. Configuratie-opties bepalen geheugentoewijzing, gebeurtenisretentie en dispatchlatentie.
Sessiekenmerken omvatten of ze over de serverresorptie heen blijven bestaantarts, maximale geheugentoewijzing en hoe ze omgaan met geheugenbelasting. Deze instellingen hebben een aanzienlijke invloed op het sessiegedrag en het resourceverbruik.
3.3 Sessiegrenzen en pakketten
Sessiegrenzen definiëren relaties tussen gebeurtenissen, targebeurtenissen van het ene pakket kunnen acties van een ander pakket activeren, wat flexibiliteit biedt in strategieën voor gegevensverzameling.
Pakketrelaties stellen u in staat om gebeurtenissen uit meerdere bronnen binnen één sessie te combineren. Deze mogelijkheid maakt uitgebreide monitoringscenario's mogelijk die verschillende SQL Server subsystemen.
4. Uitgebreide gebeurtenissessies maken met SSMS
4.1 Vereisten en instellingen
Voor het maken SQL Server Zorg ervoor dat u over de juiste machtigingen beschikt voor Extended Events-sessies. U hebt de machtiging ALTER ANY EVENT SESSION nodig voor server-scope sessies of de machtiging CONTROL op de database voor database-scope sessies.
Verifieer dat SQL Server Management Studio is geïnstalleerd en verbonden met uw tarbijvoorbeeld. Maak uzelf vertrouwd met de monitoringvereisten en identificeer welke gebeurtenissen en tarhet beste bij uw behoeften past.
4.2 Toegang tot uitgebreide gebeurtenissen in Object Explorer
Volg deze stappen om toegang te krijgen tot de interface Uitgebreide gebeurtenissen in SSMS:
- Openen SQL Server Management Studio en maak verbinding met uw SQL Server aanleg.
- Vouw in Object Explorer het volgende uit: Management -> Uitgebreide evenementen.
- Het knooppunt Uitgebreide gebeurtenissen bevat Sessions en Formules mappen voor het beheren van uw bewakingsconfiguraties.
4.3 Een nieuwe sessie maken
Een nieuwe sessie maken:
-
- Klik met de rechtermuisknop op de Sessions map onder Uitgebreide evenementen.
- Kies Nieuwe sessie om het configuratievenster te openen. De volgende inhoud gebruikt deze methode om een nieuwe sessie te maken.
Opmerking: De Nieuwe sessiewizard is ook beschikbaar voor een meer begeleide ervaring.
4.3.1 Algemene paginaconfiguratie
Op de Algemeen pagina, configureer basis sessie-eigenschappen:
- Voer een sessienaam in de Sessienaam veld. Gebruik beschrijvende namen die het doel van de monitoring aangeven.
- Optioneel selecteren Starde evenementensessie op server startube om automatische sessieactivering mogelijk te maken.
- De standaard sessiesjabloon is BlancoU kunt andere sjablonen gebruiken als u een vooraf gedefinieerde configuratie gebruikt.
4.3.2 Instellen van de gebeurtenissenpagina
De Evenementen Op deze pagina kunt u selecteren welke gebeurtenissen u wilt bewaken:
- Selecteer het tabblad Evenementen pagina van links Selecteer een pagina paneel.
- Zoek in de map Gebeurtenisbibliotheekrary, blader door de beschikbare evenementen of gebruik de zoekfunctie.
- Filter gebeurtenissen door trefwoorden als 'sql_statement_completed' in te voeren om relevante gebeurtenissen te vinden.
- Selecteer de gewenste gebeurtenis, bijvoorbeeld sql_statement_completed.
- Klik op de pijl naar rechts om het evenement naar de Geselecteerde evenementen lijst.
4.3.3 Gegevensopslagconfiguratie
De Data opslag pagina definieert waar gebeurtenisgegevens worden opgeslagen:
- Selecteer het tabblad Data opslag pagina van links Selecteer een pagina paneel.
- Zoek in de map Tarkrijgt gebied, kies een tarHaal het type op uit de vervolgkeuzelijst.
(1) gebeurtenisbestand Tarkrijgen
Het event_file targegevens op schijf opslaan met de extensie .xel:
- Kies gebeurtenisbestand aan de hand van de tartype dropdown ophalen.
- Geef het bestandspad op, bijvoorbeeld C:\temp\UwSessie_Target.xel.
- Configureer rolloveropties om schijfruimte te beheren door een maximale bestandsgrootte en een maximaal aantal bestanden in te stellen.
- De tarschrijft gebeurtenissen continu totdat de sessie stopt of de opslaglimieten zijn bereikt.
(2) ringbuffer Tarkrijgen
De ringbuffer target slaat gebeurtenissen op in het geheugen voor snelle toegang zonder schijf-I/O:
- Kies ringbuffer de tartype krijgen.
- Configureer de maximale geheugentoewijzing voor de buffer.
- Houd er rekening mee dat oudere gebeurtenissen worden verwijderd wanneer de buffer vol is. Dit is dus geschikt voor het bewaken van recente activiteiten.
(3) gebeurtenis_teller Tarkrijgen
De event_counter tarGet telt eenvoudig het aantal gebeurtenissen zonder gedetailleerde gegevens op te slaan. Dit zorgt voor minimale overhead wanneer u alleen frequentie-informatie nodig hebt.
(4) histogram Tarkrijgen
Het histogram tarGroepeer gebeurtenissen op basis van een opgegeven veldwaarde en genereer distributiestatistieken. Dit is handig voor het identificeren van veelvoorkomende patronen of waarden met een hoge frequentie.
(5) paarmatching Tarkrijgen
De pair_matching tarGet correleert gerelateerde gebeurtenissen, zoals het verkrijgen en vrijgeven van vergrendelingen. Dit maakt analyse van gekoppelde bewerkingen en hun timingrelaties mogelijk.
NOOIT Geavanceerde instellingen
De Geavanceerd pagina biedt configuratieopties op sessieniveau:
- Selecteer het tabblad Geavanceerd pagina van links Selecteer een pagina paneel.
- Configure Gebeurtenisbehoudmodus om te bepalen hoe gebeurtenissen onder geheugendruk worden verwerkt.
- Zet Maximale verzendlatentie om realtimeverwerking in evenwicht te brengen met systeemprestaties.
- Configure Maximale geheugengrootte en Maximale evenementgrootte op basis van uw monitoringvereisten.
- Kies Geheugenpartitiemodus voor optimalisatie voor omgevingen met één of meerdere CPU's.
4.4 Gebeurtenisfilters configureren (predicaten)
Predicaten verminderen het datavolume door gebeurtenissen te filteren op basis van specifieke criteria. Filters configureren:
- Op de Evenementen Selecteer op de pagina de gebeurtenis die u wilt filteren, bijvoorbeeld 'sql_statement_completed'.
- Klik op het tabblad Configure
om het dialoogvenster voor gebeurtenisconfiguratie te openen.
- Selecteer het tabblad Filter (predikaat) .
- Zoek in de map Veld Kies in de vervolgkeuzelijst het veld waarop u wilt filteren, bijvoorbeeld duur.
- Selecteer een Operator, zoals “>”.
- Voer het filter in Waarde, zoals 1000000 (1 seconde).
- Voeg indien nodig meer voorwaarden toe.
4.5 Acties en gebeurtenisvelden selecteren
Voor elke gebeurtenis kunt u selecteren welke gegevens u wilt verzamelen:
- Op de Evenementen Selecteer op de pagina de gebeurtenis waarvoor u de gegevens wilt selecteren, bijvoorbeeld 'sql_statement_completed'.
- Klik op het tabblad Configure om het dialoogvenster voor gebeurtenisconfiguratie te openen.
- Selecteer het tabblad Globale velden (acties) .
- Selecteer acties om supplementen toe te voegentary-informatie, zoals database_name of client_app_name.
- Geef je mening over de Evenementenvelden om te zien welke velden automatisch worden vastgelegd.
- Verwijder alle overbodige velden om de hoeveelheid data te verminderen.
4.6 Starsessies beheren en beheren
Nadat u uw sessie hebt geconfigureerd, kunt utarhet en controleer de werking ervan:
- Klik op het tabblad OK om de sessie te creëren.
- Vouw in Object Explorer de Sessions map om uw nieuwe sessie te zien.
- Klik met de rechtermuisknop op de sessienaam en selecteer Start Sessie om gebeurtenissen vast te leggen.
- Om live gegevens te bekijken, klikt u met de rechtermuisknop op de sessie en selecteert u Bekijk live gegevens.
- Stop de sessie door met de rechtermuisknop te klikken en te selecteren Sessie stoppen.
5. Uitgebreide gebeurtenissessies maken met T-SQL
5.1 Syntaxis voor het maken van een gebeurtenissessie
Het maken van Extended Event-sessies met T-SQL biedt nauwkeurige controle en maakt scripting voor geautomatiseerde implementatie mogelijk. De instructie CREATE EVENT SESSION volgt een specifieke syntaxisstructuur.
De basis-syntaxis omvat de sessienaam, ADD EVENT-clausules voor elke gebeurtenis, ADD TARGET-clausules voor opslagbestemmingen en optionele WITH-clausules voor sessieconfiguratie.
5.2 Een basisgebeurtenissessie maken
Een basissessie bewaakt specifieke gebeurtenissen en schrijft de resultaten naar een tarkrijgen. Hier leest u hoe u de essentiële onderdelen kunt maken.
5.2.1 Sessienaam en opties definiëren
Stardoor de sessie te creëren met een beschrijvende naam:
CREATE EVENT SESSION [SampleSession] ON SERVER
De clausule ON SERVER creëert een sessie met serverbereik die blijft bestaan tijdens databasewijzigingen. Voor Azure SQL Database gebruikt u ON DATABASE voor sessies met databasebereik.
5.2.2 Gebeurtenissen toevoegen met ADD EVENT
Voeg gebeurtenissen toe die u wilt vastleggen met behulp van de ADD EVENT-clausule:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Hiermee worden alle voltooide SQL-instructies vastgelegd. U kunt meerdere gebeurtenissen toevoegen door extra ADD EVENT-clausules op te nemen.
5.2.3 Gebeurtenisacties configureren
Acties verzamelen extra context voor elke gebeurtenis. Voeg acties toe tussen haakjes na de gebeurtenisnaam:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
In dit voorbeeld worden de SQL-tekst, de databasenaam en de gebruikersnaam voor elke voltooide instructie vastgelegd.
5.2.4 Gebeurtenispredicaten instellen (WHERE-clausule)
Predicaten filteren gebeurtenissen om het datavolume te verminderen. Gebruik de WHERE-component in de gebeurtenisdefinitie:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Hiermee wordt gefilterd op statements met een duur groter dan 5 seconden (5,000,000 microseconden).
5.3 Gebeurtenis toevoegen Tarkrijgt
Tarbepaalt waar gebeurtenisgegevens worden opgeslagen en hoe deze worden verwerkt.
5.3.1 TOEVOEGEN TARGET-syntaxis
Toevoegen tarkrijgt met behulp van de ADD TARGET-clausule nadat alle gebeurtenissen zijn gedefinieerd:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Het voorvoegsel package0 geeft de tarGet komt uit het basispakket.
5.3.2 Configureren Tarparameters ophalen
Elke tarHet get-type accepteert specifieke parameters. Configureer voor event_file de bestandsnaam, max_file_size en max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Met deze configuratie worden bestanden van maximaal 50 MB per bestand aangemaakt en worden maximaal 5 bestanden bewaard tijdens de rollover.
5.4 Sessie-opties en instellingen
Met de WITH-clausule configureert u sessieniveauopties waarmee u het gedrag en het resourcegebruik kunt bepalen.
5.4.1 MAX_MEMORY en EVENT_RETENTION_MODE
Beheer geheugentoewijzing en gebeurtenisafhandeling onder druk:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
De opties van EVENT_RETENTION_MODE omvatten ALLOW_SINGLE_EVENT_LOSS voor minimaal geheugengebruik, ALLOW_MULTIPLE_EVENT_LOSS voor matige overhead en NO_EVENT_LOSS voor volledige gegevensretentie op het cost van potentiële prestatie-impact.
5.4.2 MAX_VERZENDLATENTIE
Stel de maximale tijd in dat gebeurtenissen in buffers mogen blijven staan voordat ze naar de buffer worden geschreven. tarkrijgt:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Lagere waarden leveren meer realtime gegevens op bij de cost van toegenomen I/O-bewerkingen.
5.4.3 GEHEUGENPARTITIEMODUS
Optimaliseer geheugenpartitionering voor uw hardwareconfiguratie:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
De opties zijn onder meer GEEN voor één partitie, PER_NODE voor NUMA-systemen en PER_CPU voor maximale gelijktijdigheid op systemen met meerdere CPU's.
5.5 StarSessies stoppen en wijzigen
Beheer sessiestatus en configuratie via ALTER EVENT SESSION-instructies.
5.5.1 ALTER EVENT SESSIE voor Start/Stop
Starsessie na aanmaak:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Een hardloopsessie stoppen:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Bestaande sessies wijzigen
Sessieconfiguratie wijzigen terwijl de sessie is gestopt. Gebeurtenissen toevoegen:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Gebeurtenissen verwijderen:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Gebeurtenissessies verwijderen
Verwijder een sessie volledig met DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
De sessie moet worden gestopt voordat u kunt stoppen.
6. Werken met gebeurtenissen Tarwordt gedetailleerd
6.1 gebeurtenisbestand TarConfiguratie ophalen
Het event_file target biedt permanente opslag voor gebeurtenisgegevens met flexibele configuratieopties.
6.1.1 Bestandspad en naamgevingsconventies
Geef het volledige pad en de bestandsnaam voor gebeurtenisbestanden op:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Gebruik de extensie .xel voor uitgebreide gebeurtenislogbestanden. Zorg ervoor dat: SQL Server serviceaccount heeft schrijfrechten voor de opgegeven directory.
6.1.2 Bestandsrollover en bestandsgroottebeheer
Automatische bestandsoverdracht configureren om schijfruimte te beheren:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Wanneer een bestand 50 MB bereikt, SQL Server Extended Events maakt een nieuw bestand aan met een verhoogd achtervoegsel. Zodra er 10 bestanden zijn, wordt het oudste bestand overschreven.
6.1.3 Gegevens uit gebeurtenisbestanden lezen
Query gebeurtenisbestandsgegevens met behulp van sys.fn_xe_file_target_read_file functie:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Met het jokerpatroon worden alle bestanden gelezen die aan de sessie zijn gekoppeld.
6.2 ringbuffer TarGebruik krijgen
De ringbuffer tarslaat gebeurtenissen op in het geheugen voor snelle toegang tot recente activiteiten.
6.2.1 Geheugengebaseerde gebeurtenisopslag
Configureer ring_buffer voor geheugengebaseerde opslag:
ADD TARGET package0.ring_buffer
Gebeurtenissen blijven alleen toegankelijk zolang de sessie actief is en SQL Server is actief. Gegevens zijn lost wanneer de sessie stopt of de server opnieuw wordt opgestarttarts.
6.2.2 Buffergrootte en configuratie
Beheer geheugentoewijzing voor de ringbuffer:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Specificeer het geheugen in KB. Wanneer de buffer vol raakt, worden oudere gebeurtenissen verwijderd met behulp van een FIFO-benadering.
6.2.3 Ringbuffergegevens opvragen
Toegang tot ringbuffergegevens via DMV's:
SELECT
CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer';
De target_data bevat gebeurtenisinformatie in XML-formaat.
6.3 gebeurtenis_teller Tarkrijgen
De event_counter target biedt eenvoudige tellingen zonder gedetailleerde gegevensopslag:
ADD TARGET package0.event_counter
In deze tarTrack de gebeurtenisfrequentie met minimale overhead, handig voor monitoring met een hoog volume waarbij alleen de aantallen van belang zijn.
6.4 histogram Tarkrijgen
Het histogram tarGroepeer gebeurtenissen op basis van veldwaarden:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Met deze configuratie wordt een histogram gemaakt waarin de verdeling van gebeurtenissen over databases wordt weergegeven.
6.5 paarmatching Tarkrijgen
De pair_matching tarGet correleert gerelateerde gebeurtenissen zoals lock-acquisities met releases:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
Hierdoor is analyse van gepaarde bewerkingen en hun duur mogelijk.
7. Uitgebreide gebeurtenisgegevens bekijken en analyseren
7.1 SSMS gebruiken om live gegevens te bekijken
SQL Server Management Studio biedt een grafische interface voor het in realtime bekijken van Extended Events-gegevens:
- Vouw in Object Explorer het volgende uit: Management -> Uitgebreide evenementen -> Sessions.
- Klik met de rechtermuisknop op uw actieve sessie.
- Kies Bekijk live gegevens om de live gegevensviewer te openen.
- Gebeurtenissen worden in het raster weergegeven zodra ze plaatsvinden.
- Klik op individuele gebeurtenissen om gedetailleerde veldwaarden in het detailvenster te bekijken.
- Gebruik de filters op de werkbalk om u te richten op specifieke gebeurtenistypen of veldwaarden.
7.2 Gegevens uit gebeurtenisbestanden opvragen met T-SQL
T-SQL-query's bieden flexibele analyses van vastgelegde gebeurtenisgegevens.
7.2.1 sys.fn_xe_bestand_target_read_file-functie
Lees gebeurtenisbestandgegevens met behulp van deze systeemfunctie:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
De functie retourneert één rij per gebeurtenis met details in XML-indeling.
7.2.2 XML-gebeurtenisgegevens parseren
Specifieke waarden uit de XML-gebeurtenisgegevens extraheren:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
XQuery-expressies halen afzonderlijke veldwaarden uit de XML-structuur.
7.2.3 Gebeurtenisgegevens converteren naar tabellen
Gestructureerde resultaatsets maken van gebeurtenisgegevens:
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 Ringbuffergegevens opvragen
Gegevens uit ringbuffer extraheren tarkrijgt:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 Systeemweergaven voor uitgebreide gebeurtenissen
SQL Server biedt verschillende DMV's en catalogusweergaven voor het beheren en bewaken van Extended Event-sessies.
7.4.1 sys.server_event_sessions
Bekijk sessiedefinities die op de server zijn opgeslagen:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
In deze catalogusweergave worden configuratiedetails voor alle gedefinieerde sessies weergegeven.
7.4.2 sys.dm_xe_sessies
Bekijk momenteel actieve sessies:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Deze DMV biedt runtime-informatie over actieve Extended Event-sessies.
7.4.3 sys.dm_xe_sessie_tarkrijgt
Bekijk tarwordt gekoppeld aan actieve sessies:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 Andere nuttige DMV's
Aanvullende weergaven bieden uitgebreide sessie-informatie:
- sys.dm_xe_session_events: Geeft gebeurtenissen weer in actieve sessies
- sys.dm_xe_session_event_actions: toont acties die zijn geconfigureerd voor sessiegebeurtenissen
- sys.dm_xe_objects: Catalogiseert alle beschikbare gebeurtenissen, acties en tarkrijgt
- sys.dm_xe_object_columns: Detailsvelden beschikbaar voor elk gebeurtenistype
- sys.dm_xe_packages: Geeft een lijst van alle Extended Event-pakketten
8. Praktische use cases en voorbeelden
8.1 De uitvoering van SQL-instructies bewaken
Door de uitvoering van SQL-instructies bij te houden, krijgt u inzicht in querypatronen en prestatiekenmerken.
8.1.1 SQL_statement_completed-gebeurtenissen volgen
Maak een sessie om voltooide SQL-instructies te bewaken:
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 Filteren op database of applicatie
Concentreer u op specifieke databases of toepassingen met behulp van predicaten:
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 Deadlock-informatie vastleggen
Voor deadlockanalyse is het nodig om gedetailleerde informatie over conflicterende transacties te verzamelen.
8.2.1 xml_deadlock_report Gebeurtenis
Maak een sessie om volledige deadlockgrafieken vast te leggen:
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 Deadlockgrafieken analyseren
Deadlock-informatie extraheren en analyseren:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
De deadlockgrafiek bevat details over processen, middelen en slachtofferselectie.
8.3 Problemen met de prestaties van query's bijhouden
Identificeer slecht presterende query's met behulp van duur- en resourceverbruiksmetrieken.
8.3.1 Detectie van langlopende query's
Vang query's op die bepaalde duurdrempels overschrijden:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 Uitvoeringsplananalyse
Vastleggen van queryplannen voor prestatieanalyse:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 Inlog- en beveiligingsgebeurtenissen bewaken
Houd authenticatie- en autorisatieactiviteiten bij voor beveiligingsaudits.
8.4.1 Bijhouden van succes en mislukking van aanmeldingen
Controleer zowel succesvolle als mislukte aanmeldpogingen:
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 Machtigingswijzigingen
Wijzigingen in beveiligingsmachtigingen bijhouden:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 Monitoring op databaseniveau
Controleer databasespecifieke bewerkingen en statuswijzigingen.
8.5.1 Gebeurtenissen back-uppen en herstellen
Back-up- en herstelbewerkingen bijhouden:
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 Wijzigingen in de databasestatus
Controleer de overgangen van de databasestatus:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Databasecorruptie en integriteitsproblemen detecteren
SQL Server Extended Events biedt mogelijkheden voor vroegtijdige waarschuwing bij het detecteren van mogelijke databasecorruptie. Zo kunt u proactief ingrijpen voordat problemen escaleren.
8.6.1 Belangrijke gebeurtenissen voor corruptiedetectie
Verschillende gebeurtenissen duiden op mogelijke corruptie of I/O-problemen.
8.6.1.1 error_reported Gebeurtenis voor kritieke fouten
De gebeurtenis error_reported legt alle SQL Server fouten, inclusief corruptiegerelateerde foutnummers:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Fout 823 geeft I/O-fouten aan, 824 signaleert fouten in de logische consistentie en 825 meldt succesvolle lees- en herstartpogingen, wat kan duiden op hardwareproblemen.
8.6.1.2 database_suspect_data_page-gebeurtenis
Deze gebeurtenis wordt geactiveerd wanneer SQL Server komt een verdachte pagina tegen:
ADD EVENT sqlserver.database_suspect_data_page
Verdachte pagina's geven aan dat er sprake kan zijn van corruptie en worden vastgelegd in de tabel msdb.dbo.suspect_pages.
8.6.1.3 errorlog_scribe Gebeurtenis
Vastgelegde vermeldingen die naar de SQL Server foutenlogboek:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Een corruptiemonitoringsessie aanmaken
Richt een uitgebreide sessie op voor het detecteren en monitoren van corruptie.
8.6.2.1 Filteren op corruptiefoutnummers (823, 824, 825)
Maak een tarsessie gericht op corruptie-indicatoren:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 Het instellen van passende ernstniveaus
Geef de volgende fouten met een hoge ernst weer die op corruptie kunnen duiden:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Ernstgraad 20 en hoger duidt op problemen op systeemniveau die vaak verband houden met corruptie.
8.6.2.3 Gebeurtenisbestand configureren Tarontvang waarschuwingen
Corruptiegebeurtenissen opslaan voor analyse en waarschuwingen:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 Corruptiegebeurtenisgegevens analyseren
Extraheer en interpreteer corruptiegerelateerde gebeurtenissen uit vastgelegde gegevens.
8.6.3.1 Verdachte pagina's identificeren
Query voor database_suspect_data_page-gebeurtenissen:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Foutdetails en context extraheren
Analyseer error_reported-gebeurtenissen op corruptiepatronen:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 Integratie met DBCC CHECKDB
Gebruik uitgebreide gebeurtenisgegevens als leidraad DBCC CONTROLEERDB uitvoering.
8.6.4.1 DBCC CHECKDB activeren op basis van gebeurtenissen
Wanneer er corruptiegebeurtenissen worden gedetecteerd, voert u DBCC CHECKDB uit voor uitgebreide validatie:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Extended Events geeft een vroege waarschuwing, terwijl DBCC CHECKDB een grondige validatie uitvoert.
8.6.4.2 Geautomatiseerde workflows voor corruptierespons
Implementeer geautomatiseerde reacties door het gebeurtenisbestand te bewaken:
- Configure SQL Server Agenttaak om periodiek het corruptiebewakingsgebeurtenisbestand te raadplegen.
- Wanneer er corruptiegebeurtenissen worden gevonden, voert u DBCC CHECKDB uit op de betrokken database.
- Stuur e-mailwaarschuwingen naar DBA's met gebeurtenisdetails en DBCC CHECKDB-resultaten.
- Registreer bevindingen in een centrale controletabel voor trendanalyse.
8.6.4.3 Proactieve monitoring in evenwicht brengen met prestatie
Extended Events biedt een lage overhead voor corruptiedetectie vergeleken met frequente DBCC CHECKDB-uitvoering:
- Voer Extended Events continu uit voor realtime detectie van corruptie
- Voer DBCC CHECKDB alleen uit wanneer er corruptie-indicatoren verschijnen
- Plan regelmatig DBCC CHECKDB tijdens onderhoudsvensters
- Gebruik Extended Events om te identificeren welke databases onmiddellijke aandacht nodig hebben
Deze aanpak biedt proactieve monitoring zonder het aanzienlijke resourceverbruik van voortdurende integriteitscontroles.
8.6.4.4 Corrupte database repareren
Als er corrupties in de database worden aangetroffen, kunt u DBCC CHECKDB gebruiken om kleine corrupties te herstellen. Als dit niet lukt, kunt u een externe tool proberen. SQL-databasehersteltool, wat over het algemeen een hoger herstelpercentage biedt bij ernstig beschadigde databases.
9. Server-Scoped vs. Database-Scoped Extended Events
9.1 Server-Scoped Event Sessies
Server-scoped sessies monitoren de activiteit over de gehele SQL Server Deze sessies worden gemaakt met de ON SERVER-clausule en blijven behouden in de hoofddatabase.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Servergerichte sessies leggen gebeurtenissen uit alle databases vast en zijn geschikt voor bewaking op instantieniveau.
9.2 Database-Scoped Event Sessies (Azure SQL Database)
Database-scoped sessies zijn beperkt tot één database en worden voornamelijk gebruikt in Azure SQL Database, waar toegang op serverniveau beperkt is:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
In Azure SQL Database worden gebeurtenisbestanden opgeslagen in Azure Blob Storage in plaats van in lokale bestandssystemen.
9.3 Verschillen en gebruiksgevallen
Server-scope sessies bieden uitgebreide monitoring voor alle databases, maar vereisen verhoogde rechten. Database-scope sessies bieden isolatie en zijn geschikt voor het monitoren van specifieke applicaties of tenants.
Gebruik sessies met serverbereik voor gecentraliseerde bewaking, prestatieproblemen oplossen in databases en beveiligingscontroles. Gebruik sessies met databasebereik in Azure SQL Database, omgevingen met meerdere tenants of bij het delegeren van bewakingstaken aan applicatieteams.
10. Uitgebreide gebeurtenissen in Azure SQL Database
10.1 Azure-specifieke overwegingen
Azure SQL Database implementeert Extended Events met enkele verschillen ten opzichte van on-premises SQL ServerSessies zijn standaard databasegerelateerd en voor de opslag van gebeurtenisbestanden wordt Azure Blob Storage gebruikt in plaats van lokale bestandssystemen.
Voor authenticatie bij Azure Blob Storage is een SAS-token vereist dat is geconfigureerd in het gebeurtenisbestand tarophalen. Verbindingsreeksen verwijzen naar het opslagaccount en de container waar gebeurtenisbestanden worden opgeslagen.
10.2 op voorraad Tarkomt in Azure
Azure SQL Database ondersteunt deze uitgebreide gebeurtenis tarkrijgt:
- event_file: schrijft naar Azure Blob Storage
- ring_buffer: geheugengebaseerde opslag met hetzelfde gedrag als on-premises
- event_counter: Telt het aantal gebeurtenissen
Het event_file tarVoor ophalen is configuratie met Azure Blob Storage-referenties vereist:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Database-Scoped Sessies maken
Een sessie maken in Azure SQL Database:
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
Database-scope sessies in Azure gedragen zich op een vergelijkbare manier als server-scope sessies on-premises, maar het bereik is beperkt tot de huidige database.
11. Best practices en prestatie-optimalisatie
11.1 Minimaliseren van prestatie-impact
Extended Events zijn ontworpen voor minimale overhead, maar een onjuiste configuratie kan de prestaties beïnvloeden. Volg deze richtlijnen:
- Gebruik specifieke predicaten om gebeurtenissen te filteren in plaats van alles vast te leggen
- Vermijd het verzamelen van onnodige acties die extra verwerkingsoverhead opleveren
- Kies passend tarwordt gebaseerd op de behoeften aan gegevensretentie
- Stel redelijke buffergroottes en verzendlatenties in
- Controleer het verbruik van sessiebronnen met behulp van DMV's
11.2 De juiste gebeurtenissen en filters kiezen
Selecteer gebeurtenissen die direct aansluiten bij uw monitoringdoelstellingen. Vermijd hoogfrequente gebeurtenissen tenzij noodzakelijk en pas altijd predicaten toe om de datahoeveelheid te beperken.
In plaats van bijvoorbeeld alle sql_statement_completed-gebeurtenissen vast te leggen, kunt u filteren op specifieke databases of duurdrempels:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 TarOntvang selectierichtlijnen
Kies tarwordt gebaseerd op uw analysevereisten:
- Gebruik event_file voor gedetailleerde historische analyse en langetermijnbehoud
- Gebruik ring_buffer voor realtime monitoring met minimale I/O-impact
- Gebruik event_counter wanneer alleen de frequentie van belang is
- Gebruik histogram voor distributieanalyse
- Gebruik pair_matching voor gecorreleerde gebeurtenisanalyse
11.4 Aanbevelingen voor sessieconfiguratie
Configureer sessies met geschikte resourcelimieten:
- Stel MAX_MEMORY in op basis van het verwachte gebeurtenisvolume en de serverbronnen
- Gebruik ALLOW_SINGLE_EVENT_LOSS voor minimale overhead in most scenario's
- Stel MAX_DISPATCH_LATENCY in om realtimebehoeften in evenwicht te brengen met prestaties
- Gebruik PER_CPU-geheugenpartitionering op systemen met meerdere processors
- Vermijd STARTUP_STATE=ON tenzij continue monitoring vereist is
11.5 De grootte en retentie van gebeurtenisbestanden beheren
Configureer bestandrollover om onbeperkt schijfgebruik te voorkomen:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Deze configuratie beheert ongeveer 1 GB aan gebeurtenisgegevens (10 bestanden × 100 MB). Pas dit aan op basis van uw bewaartermijnen en beschikbare opslagruimte.
12. Problemen met uitgebreide gebeurtenissen oplossen
12.1 Veelvoorkomende problemen en oplossingen
Veelvoorkomende problemen met Extended Events zijn onder meer sessies die geen gegevens vastleggen, prestatievermindering, bestandsverstoringen, enz. tarproblemen en onverwacht sessiegedrag krijgen.
12.2 Sessie legt geen gegevens vast
Als een sessie de verwachte gebeurtenissen niet vastlegt:
- Controleer of de sessie istarted met behulp van sys.dm_xe_sessions.
- Controleer predicaten om er zeker van te zijn dat ze niet alle gebeurtenissen wegfilteren.
- Bevestig dat gebeurtenissen worden geactiveerd op temporarfilters verwijderen.
- Controleer de machtigingen om er zeker van te zijn dat u sessiegegevens kunt bekijken.
- Controleer dat tarZorg dat de configuratie correct en schrijfbaar is.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Prestatievermindering
Als uitgebreide gebeurtenissen prestatieproblemen veroorzaken:
- Voeg predicaten toe om het gebeurtenisvolume te verminderen.
- Verwijder onnodige acties die supplementen verzamelentarmijn gegevens.
- Verhoog MAX_DISPATCH_LATENCY om de schrijffrequentie te verlagen.
- Wijzig EVENT_RETENTION_MODE in ALLOW_SINGLE_EVENT_LOSS.
- Overweeg om ring_buffer te gebruiken in plaats van event_file voor gebeurtenissen met een hoge frequentie.
12.4-bestand Tarproblemen krijgen
Bestand tarProblemen hebben vaak te maken met machtigingen of schijfruimte:
- Controleer de SQL Server serviceaccount heeft schrijfrechten voor de tarmap ophalen.
- Zorg ervoor dat er voldoende schijfruimte beschikbaar is.
- Controleer of het opgegeven pad bestaat en toegankelijk is.
- Controleer de configuratie van het bestand-rolloverproces als bestanden niet zoals verwacht worden overgezet.
12.5 Foutopsporing met systeemweergaven
Gebruik DMV's om problemen met uitgebreide gebeurtenissen te diagnosticeren:
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. Geavanceerde onderwerpen
13.1 Aangepaste gebeurtenispakketten maken
Geavanceerde gebruikers kunnen aangepaste evenementenpakketten maken om hun evenementen uit te breiden. SQL Server Uitgebreide Event-functionaliteit. Dit vereist C++-ontwikkeling en integratie met de SQL Server uitbreidbaarheidsframework.
Met aangepaste pakketten kunt u applicatiespecifieke gebeurtenissen bewaken of bewakingssystemen van derden integreren met de Extended Events-infrastructuur.
13.2 Evenementsessiesjablonen
SSMS biedt ingebouwde sjablonen voor veelvoorkomende monitoringscenario's. U kunt sjablonen gebruiken bij het aanmaken van nieuwe sessies via de wizard:
- Klik in het dialoogvenster Nieuwe sessie op de Sjabloon dropdown.
- Selecteer uit beschikbare sjablonen, zoals Query Detail Tracking of Systeemstatus.
- Pas de sjabloon aan uw specifieke wensen aan.
13.3 Integratie met monitoringoplossingen
Uitgebreide gebeurtenisgegevens kunnen worden gebruikt als input voor oplossingen voor bedrijfsbewaking:
- Exporteer gebeurtenisgegevens naar gecentraliseerde logsystemen
- Gebeurtenisbestanden parseren en gegevens laden in bewakingsdatabases
- Maak aangepaste dashboards met behulp van BI-tools
- Activeer waarschuwingen op basis van specifieke gebeurtenispatronen
- Correlaat SQL Server gebeurtenissen met applicatie- en infrastructuurmetrieken
13.4 Automatisering en planning
Automatiseer het beheer van uitgebreide evenementen met behulp van SQL Server Tussenpersoon:
- Creëer banen omtart/stop sessies tijdens specifieke tijdsvensters
- Analyse en rapportage van gebeurtenisbestanden plannen
- Implementeer gegevensretentiebeleid door oude gebeurtenisbestanden te archiveren of te verwijderen
- Automatiseer de reactie op gedetecteerde omstandigheden, zoals prestatieproblemen of beveiligingsgebeurtenissen
14. Migratie van SQL Server Profiler
14.1 SQL Server Profilergebeurtenissen naar uitgebreide gebeurtenissen toewijzen
Microsoft biedt mapping tussen SQL Server Profiler gebeurtenissen en uitgebreide gebeurtenissen. Veelvoorkomende toewijzingen zijn onder andere:
- SQL:BatchVoltooid -> sql_batch_voltooid
- SQL:BatchStarting -> sql_batch_starTing
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starTing
- Deadlock-grafiek -> xml_deadlock_report
- Audit Login -> inloggen
- Audit Afmelden -> Afmelden
14.2 Trace-definities converteren
Bestaande converteren SQL Server Profiler traceert naar Extended Events-sessies door equivalente gebeurtenissen te identificeren en geschikte predicaten te configureren. SSMS biedt ondersteuning voor veelvoorkomende conversies.
Controleer traceerfilters en converteer ze naar Extended Events-predicaten. Acties in Extended Events vervangen traceerkolommen van SQL Server Profiler.
14.3 Prestatievergelijking
Uitgebreide evenementen leveren aanzienlijk betere prestaties dan SQL Server Profiler. Benchmarkstudies tonen aan dat Extended Events minder CPU-cycli verbruiken en minder impact hebben op de transactiedoorvoer.
Uitgebreide gebeurtenissen maken gebruik van asynchrone verwerking en geoptimaliseerd geheugenbeheer, terwijl SQL Server Profiler is afhankelijk van synchrone gebeurtenisregistratie die blokkeert totdat de traceverwerking is voltooid.
15. Conclusie
15.1 Samenvatting van de belangrijkste concepten
SQL Server Extended Events biedt een krachtig, lichtgewicht raamwerk voor monitoring en probleemoplossing SQL ServerDe architectuur bestaat uit gebeurtenissen, acties, predicaten, tarkrijgt en sessies die samenwerken om relevante serveractiviteit vast te leggen.
Sessies kunnen worden gemaakt met behulp van SSMS of T-SQL, wat flexibiliteit biedt voor zowel ad-hoc probleemoplossing als geautomatiseerde monitoring. target-typen ondersteunen verschillende analysebenaderingen, van realtime monitoring met ring_buffer tot historische analyse met event_file.
Extended Events levert superieure prestaties vergeleken met SQL Server Profiler biedt uitgebreidere monitoringmogelijkheden. Het systeem stelt databasebeheerders en ontwikkelaars in staat problemen te diagnosticeren, de prestaties te optimaliseren, de beveiliging te verbeteren en compliance te handhaven.
15.2 Volgende stappen en verdere bronnen
Om uw ontwikkeling voort te zetten SQL Server XEvents-expertise:
- Implementeer Extended Events in testomgevingen om praktische ervaring op te doen
- Bekijk de Microsoft-documentatie voor volledige gebeurteniscatalogi en gedetailleerde syntaxisreferenties
- Open SQL Server communityforums om van de ervaringen van anderen te leren
- Ontdek geavanceerde scenario's zoals aangepaste pakketten en integratie met monitoringplatforms
- Ontwikkel een bibliotheekrary van sessiesjablonen voor veelvoorkomende monitoringscenario's
16 FAQ-sectie
Vraag: Wat zijn SQL Server Uitgebreide evenementen?
A: SQL Server Extended Events is een lichtgewicht prestatiebewakingssysteem dat is geïntegreerd in de SQL Server Een database-engine die gedetailleerde informatie over serveractiviteiten vastlegt met minimale overhead.
V: Hoe verschillen Extended Events van SQL Server Profielmaker?
A: Uitgebreide gebeurtenissen bieden betere prestaties, lagere overhead en een flexibelere configuratie dan SQL Server Profiler. SQL Server Profiler is verouderd en Microsoft raadt aan om Extended Events te gebruiken voor alle bewakingstaken.
V: Kunnen uitgebreide evenementen invloed hebben op SQL Server prestatie?
A: Wanneer Extended Events correct geconfigureerd zijn met de juiste predicaten en resourcelimieten, hebben ze minimale impact op de prestaties. Een slechte configuratie zonder filtering kan de prestaties beïnvloeden.
V: Welke machtigingen zijn vereist om Extended Event-sessies te maken?
A: U hebt de machtiging ALTER ANY EVENT SESSION nodig voor sessies met serverbereik of de machtiging CONTROL op de database voor sessies met databasebereik.
V: Hoe bekijk ik gegevens van Uitgebreide Gebeurtenissen?
A: Gebruik SQL Server Live dataviewer van Management Studio, query gebeurtenisbestanden met sys.fn_xe_file_target_read_file, of ringbuffergegevens opvragen via DMV's.
V: Kan Extended Events databasecorruptie detecteren?
A: Ja, Extended Events kan corruptiegerelateerde fouten (823, 824, 825) en verdachte paginagebeurtenissen vastleggen, zodat u vroegtijdig wordt gewaarschuwd voor mogelijke corruptieproblemen.
V: Wat is het verschil tussen gebeurtenissen, acties en predicaten?
A: Gebeurtenissen zijn gebeurtenissen die u wilt monitoren. Acties voegen extra toe.tarInformatie over vastgelegde gebeurtenissen. Predicaten filteren gebeurtenissen op basis van voorwaarden om het datavolume te verminderen.
V: Hoe kan ik query's van specifieke applicaties of databases controleren?
A: Gebruik predicaten in uw gebeurtenisconfiguratie om te filteren op database_name, client_app_name of andere relevante velden.
Vraag: Wat tarmoet ik gebruiken voor Extended Events?
A: Gebruik event_file voor permanente opslag en historische analyse, ring_buffer voor realtime monitoring met lage overhead, event_counter voor eenvoudige frequentietracking en histogram voor distributieanalyse.
V: Zijn Extended Events beschikbaar in Azure SQL Database?
A: Ja, Azure SQL Database ondersteunt database-gerichte Extended Events met gebeurtenisbestanden die zijn opgeslagen in Azure Blob Storage.
V: Hoe los ik problemen op met een Extended Events-sessie die geen gegevens vastlegt?
A: Controleer of de sessie istarted, controleer of predicaten niet alle gebeurtenissen filteren, bevestig tarconfiguratie ophalen en machtigingen controleren met behulp van systeem-DMV's.
V: Kan ik het beheer van uitgebreide gebeurtenissen automatiseren?
A: Ja, gebruik SQL Server Agentenbanen naar starStop sessies, analyseer gebeurtenisbestanden, implementeer bewaarbeleid en reageer op gedetecteerde omstandigheden.
Referenties
- Snelle Start: Uitgebreide evenementen in SQL Server – Microsoft Learn
- Overzicht van uitgebreide evenementen – Microsoft Learn
- SQL Server Uitgebreide evenementensessies – Microsoft Learn
- Tarkrijgt voor uitgebreide evenementen in SQL Server – Microsoft Learn
- SQL Server Uitgebreide gebeurtenissen-engine – Microsoft Learn
- SQL Server Profiler: complete gids
- DBCC CHECKDB: Complete gids
- DataNumen SQL Recovery
Over de auteur
Yuan Sheng is een senior databasebeheerder (DBA) met meer dan 10 jaar ervaring in SQL Server omgevingen en enterprise databasebeheer. Hij heeft honderden databaseherstelscenario's succesvol opgelost in financiële dienstverlening, gezondheidszorg en productiebedrijven.
Yuan is gespecialiseerd in SQL Server Databaseherstel, oplossingen voor hoge beschikbaarheid en prestatieoptimalisatie. Zijn uitgebreide praktijkervaring omvat het beheer van multi-terabyte databases, de implementatie van Always-On Availability Groups en de ontwikkeling van geautomatiseerde back-up- en herstelstrategieën voor bedrijfskritische bedrijfssystemen.
Met zijn technische expertise en praktische aanpak richt Yuan zich op het creëren van uitgebreide handleidingen die databasebeheerders en IT-professionals helpen complexe problemen op te lossen. SQL Server uitdagingen efficiënt. Hij blijft op de hoogte van de nieuwste SQL Server releases en de evoluerende databasetechnologieën van Microsoft, waarbij hij regelmatig herstelscenario's test om ervoor te zorgen dat zijn aanbevelingen overeenkomen met de beste praktijken in de praktijk.
Heb vragen over SQL Server herstel of heeft u aanvullende begeleiding nodig bij het oplossen van databaseproblemen? Yuan verwelkomt feedback en suggesties om deze technische middelen te verbeteren.

















