Inhoudsopgave verstoppen
8. Praktische use cases en voorbeelden

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:

  1. Openen SQL Server Management Studio en maak verbinding met uw SQL Server aanleg.
  2. Vouw in Object Explorer het volgende uit: Management -> Uitgebreide evenementen.
  3. Het knooppunt Uitgebreide gebeurtenissen bevat Sessions en Formules mappen voor het beheren van uw bewakingsconfiguraties.

Toegang tot de interface Uitgebreide gebeurtenissen in SQL Server Beheer Studio.

4.3 Een nieuwe sessie maken

Een nieuwe sessie maken:

    1. Klik met de rechtermuisknop op de Sessions map onder Uitgebreide evenementen.
    2. Kies Nieuwe sessie om het configuratievenster te openen. De volgende inhoud gebruikt deze methode om een ​​nieuwe sessie te maken.

Maak een nieuwe sessie van uitgebreide gebeurtenissen in SQL Server Beheer Studio.

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:

  1. Voer een sessienaam in de Sessienaam veld. Gebruik beschrijvende namen die het doel van de monitoring aangeven.
  2. Optioneel selecteren Starde evenementensessie op server startube om automatische sessieactivering mogelijk te maken.
  3. De standaard sessiesjabloon is BlancoU kunt andere sjablonen gebruiken als u een vooraf gedefinieerde configuratie gebruikt.

Algemene pagina van de Extended Events-sessie in SQL Server Beheer Studio.

4.3.2 Instellen van de gebeurtenissenpagina

De Evenementen Op deze pagina kunt u selecteren welke gebeurtenissen u wilt bewaken:

  1. Selecteer het tabblad Evenementen pagina van links Selecteer een pagina paneel.
  2. Zoek in de map Gebeurtenisbibliotheekrary, blader door de beschikbare evenementen of gebruik de zoekfunctie.
  3. Filter gebeurtenissen door trefwoorden als 'sql_statement_completed' in te voeren om relevante gebeurtenissen te vinden.
  4. Selecteer de gewenste gebeurtenis, bijvoorbeeld sql_statement_completed.
  5. Klik op de pijl naar rechts om het evenement naar de Geselecteerde evenementen lijst.

Evenementenpagina van de Extended Events-sessie in SQL Server Beheer Studio.

4.3.3 Gegevensopslagconfiguratie

De Data opslag pagina definieert waar gebeurtenisgegevens worden opgeslagen:

  1. Selecteer het tabblad Data opslag pagina van links Selecteer een pagina paneel.
  2. Zoek in de map Tarkrijgt gebied, kies een tarHaal het type op uit de vervolgkeuzelijst.

Gegevensopslagpagina van de Extended Events-sessie in SQL Server Beheer Studio.

(1) gebeurtenisbestand Tarkrijgen

Het event_file targegevens op schijf opslaan met de extensie .xel:

  1. Kies gebeurtenisbestand aan de hand van de tartype dropdown ophalen.
  2. Geef het bestandspad op, bijvoorbeeld C:\temp\UwSessie_Target.xel.
  3. Configureer rolloveropties om schijfruimte te beheren door een maximale bestandsgrootte en een maximaal aantal bestanden in te stellen.
  4. De tarschrijft gebeurtenissen continu totdat de sessie stopt of de opslaglimieten zijn bereikt.

Stel de sessie in targa naar event_file in SSMS

(2) ringbuffer Tarkrijgen

De ringbuffer target slaat gebeurtenissen op in het geheugen voor snelle toegang zonder schijf-I/O:

  1. Kies ringbuffer de tartype krijgen.
  2. Configureer de maximale geheugentoewijzing voor de buffer.
  3. Houd er rekening mee dat oudere gebeurtenissen worden verwijderd wanneer de buffer vol is. Dit is dus geschikt voor het bewaken van recente activiteiten.

Kies het targa naar ring_buffer voor de Extended Events-sessie in SQL Server Beheer Studio.

(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.

Kies het targa naar event_counter voor de Extended Events-sessie in SQL Server Beheer Studio.

(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.

Kies het tarGa naar het histogram voor de Extended Events-sessie in SQL Server Beheer Studio.

(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.

Stel de sessie in tarGa naar pair_matching in SSMS

NOOIT Geavanceerde instellingen

De Geavanceerd pagina biedt configuratieopties op sessieniveau:

  1. Selecteer het tabblad Geavanceerd pagina van links Selecteer een pagina paneel.
  2. Configure Gebeurtenisbehoudmodus om te bepalen hoe gebeurtenissen onder geheugendruk worden verwerkt.
  3. Zet Maximale verzendlatentie om realtimeverwerking in evenwicht te brengen met systeemprestaties.
  4. Configure Maximale geheugengrootte en Maximale evenementgrootte op basis van uw monitoringvereisten.
  5. Kies Geheugenpartitiemodus voor optimalisatie voor omgevingen met één of meerdere CPU's.

Geavanceerde pagina van de sessie in SQL Server Beheer Studio.

4.4 Gebeurtenisfilters configureren (predicaten)

Predicaten verminderen het datavolume door gebeurtenissen te filteren op basis van specifieke criteria. Filters configureren:

  1. Op de Evenementen Selecteer op de pagina de gebeurtenis die u wilt filteren, bijvoorbeeld 'sql_statement_completed'.
  2. Klik op het tabblad Configure om het dialoogvenster voor gebeurtenisconfiguratie te openen.
    Configureer de gebeurtenis van een Extended Events-sessie in SQL Server Beheer Studio.
  3. Selecteer het tabblad Filter (predikaat) .
  4. Zoek in de map Veld Kies in de vervolgkeuzelijst het veld waarop u wilt filteren, bijvoorbeeld duur.
  5. Selecteer een Operator, zoals “>”.
  6. Voer het filter in Waarde, zoals 1000000 (1 seconde).
  7. Voeg indien nodig meer voorwaarden toe.

Configureer de filters (predicaten) voor een gebeurtenis.

4.5 Acties en gebeurtenisvelden selecteren

Voor elke gebeurtenis kunt u selecteren welke gegevens u wilt verzamelen:

  1. Op de Evenementen Selecteer op de pagina de gebeurtenis waarvoor u de gegevens wilt selecteren, bijvoorbeeld 'sql_statement_completed'.
  2. Klik op het tabblad Configure om het dialoogvenster voor gebeurtenisconfiguratie te openen.
  3. Selecteer het tabblad Globale velden (acties) .
  4. Selecteer acties om supplementen toe te voegentary-informatie, zoals database_name of client_app_name.
    Configureer de acties van een gebeurtenis.
  5. Geef je mening over de Evenementenvelden om te zien welke velden automatisch worden vastgelegd.
  6. Verwijder alle overbodige velden om de hoeveelheid data te verminderen.
    Configureer de velden van een gebeurtenis.

4.6 Starsessies beheren en beheren

Nadat u uw sessie hebt geconfigureerd, kunt utarhet en controleer de werking ervan:

  1. Klik op het tabblad OK om de sessie te creëren.
  2. Vouw in Object Explorer de Sessions map om uw nieuwe sessie te zien.
  3. Klik met de rechtermuisknop op de sessienaam en selecteer Start Sessie om gebeurtenissen vast te leggen.
    Stareen Extended Events-sessie in SQL Server Beheer Studio.
  4. Om live gegevens te bekijken, klikt u met de rechtermuisknop op de sessie en selecteert u Bekijk live gegevens.
    Bekijk de live-gegevens van een Extended Events-sessie in SQL Server Beheer Studio.
  5. 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:

  1. Vouw in Object Explorer het volgende uit: Management -> Uitgebreide evenementen -> Sessions.
  2. Klik met de rechtermuisknop op uw actieve sessie.
  3. Kies Bekijk live gegevens om de live gegevensviewer te openen.
    Bekijk de live-gegevens van een Extended Events-sessie in SQL Server Beheer Studio.
  4. Gebeurtenissen worden in het raster weergegeven zodra ze plaatsvinden.
  5. Klik op individuele gebeurtenissen om gedetailleerde veldwaarden in het detailvenster te bekijken.
    Bekijk de live-gegevens van de evenementen, inclusief de evenementdetails.
  6. 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:

  1. Configure SQL Server Agenttaak om periodiek het corruptiebewakingsgebeurtenisbestand te raadplegen.
  2. Wanneer er corruptiegebeurtenissen worden gevonden, voert u DBCC CHECKDB uit op de betrokken database.
  3. Stuur e-mailwaarschuwingen naar DBA's met gebeurtenisdetails en DBCC CHECKDB-resultaten.
  4. 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:

  1. Controleer of de sessie istarted met behulp van sys.dm_xe_sessions.
  2. Controleer predicaten om er zeker van te zijn dat ze niet alle gebeurtenissen wegfilteren.
  3. Bevestig dat gebeurtenissen worden geactiveerd op temporarfilters verwijderen.
  4. Controleer de machtigingen om er zeker van te zijn dat u sessiegegevens kunt bekijken.
  5. 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:

  1. Voeg predicaten toe om het gebeurtenisvolume te verminderen.
  2. Verwijder onnodige acties die supplementen verzamelentarmijn gegevens.
  3. Verhoog MAX_DISPATCH_LATENCY om de schrijffrequentie te verlagen.
  4. Wijzig EVENT_RETENTION_MODE in ALLOW_SINGLE_EVENT_LOSS.
  5. 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:

  1. Controleer de SQL Server serviceaccount heeft schrijfrechten voor de tarmap ophalen.
  2. Zorg ervoor dat er voldoende schijfruimte beschikbaar is.
  3. Controleer of het opgegeven pad bestaat en toegankelijk is.
  4. 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:

  1. Klik in het dialoogvenster Nieuwe sessie op de Sjabloon dropdown.
  2. Selecteer uit beschikbare sjablonen, zoals Query Detail Tracking of Systeemstatus.
  3. 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


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.