Distribuie acum:
Cuprins ascunde
8. Cazuri practice de utilizare și exemple

1. Introducere

1.1 Ce sunt SQL Server Evenimente extinse?

SQL Server Extended Events este un sistem ușor de monitorizare a performanței care permite administratorilor și dezvoltatorilor să colecteze și să analizeze date detaliate despre activitatea serverului. Acest sistem este integrat în SQL Server Motor de baze de date și oferă informații complete atât asupra operațiunilor normale, cât și asupra scenariilor de depanare.

1.2 De ce să se utilizeze evenimente extinse pentru monitorizare?

SQL Server Extended Events oferă câteva avantaje convingătoare pentru monitorizarea și depanarea bazelor de date:

  • Impact minim asupra performanței cu arhitectură ușoară
  • Control granular asupra colectării datelor și filtrării evenimentelor
  • Colectare de date personalizabilă, adaptată nevoilor specifice de monitorizare
  • Capacitatea de a captura evenimente din mai multe pachete simultan
  • Capacități flexibile de filtrare pentru a se concentra pe operațiunile relevante
  • Suport pentru monitorizarea sistemului de producție fără a degrada experiența utilizatorului
  • Urmărirea completă a indicatorilor de performanță
  • Capacități avansate de diagnosticare pentru depanare
  • Întreținerea pistei de audit pentru cerințele de conformitate
  • Opțiuni de analiză a datelor în timp real și istoric

1.3 Evenimente extinse vs. SQL Server profil

In timp ce SQL Server profil Deși a fost un instrument tradițional de monitorizare, MS SQL Extended Events oferă o alternativă mai eficientă. Extended Events consumă mai puține resurse de sistem și oferă o scalabilitate mai bună pentru mediile de producție.

SQL Server Profiler este acum perimat, iar Microsoft recomandă migrarea la Extended Events pentru toate activitățile de monitorizare.

2. Înțelegerea arhitecturii evenimentelor extinse

2.1 Componente ale motorului de evenimente extinse

Motorul Extended Events este alcătuit din mai multe componente de bază care funcționează împreună pentru a captura, procesa și stoca datele evenimentelor. Înțelegerea acestor componente vă ajută să proiectați soluții eficiente de monitorizare.

  • Dispecer: Componenta dispecerului coordonează fluxul de evenimente de la sursele de evenimente către motorul de evenimente extinse. Când se declanșează un eveniment, dispecerul primește notificarea și o direcționează către sesiunile active care s-au abonat la acel tip specific de eveniment.
  • Tampon: Bufferele stochează temporar datele evenimentelor în memorie înainte de a le scrie în destinații. Acest mecanism de buffering îmbunătățește performanța prin reducerea operațiunilor I/O. Dimensiunea bufferului și setările de gestionare pot fi configurate pentru a echilibra utilizarea memoriei cu cerințele de captare a datelor.
  • Sesiune: O sesiune definește domeniul de aplicare al monitorizării evenimentelor. Specifică ce evenimente să fie capturate, ce acțiuni să fie executate, ce predicate să fie aplicate și unde să fie stocate rezultatele. Sesiunile pot fi create, modificate, pornite și oprite independent.
  • Instanță țintă: Instanțele țintă reprezintă destinațiile de stocare pentru datele de evenimente capturate. Fiecare sesiune poate scrie într-una sau mai multe ținte, cum ar fi fișiere, buffere inelare sau contoare. Țintele procesează și persistă informațiile despre evenimente pentru analize ulterioare.

2.2 Pachete de evenimente

SQL Server Evenimentele extinse organizează funcționalitatea în pachete. Fiecare pachet conține evenimente, acțiuni, tipuri, predicate și ținte conexe. Pachetele comune includ sqlserver, sqlos și package0.

  • Pachetul sqlserver oferă evenimente specifice bazei de date, cum ar fi interogări și tranzacții.
  • Pachetul sqlos conține evenimente ale sistemului de operare.
  • Pachetul0 oferă funcționalități de uz general utilizate în toate pachetele.

2.3 Tipuri și câmpuri de evenimente

Evenimentele reprezintă apariții în cadrul SQL Server pe care doriți să le monitorizați. Fiecare tip de eveniment are câmpuri predefinite care captează informații relevante. De exemplu, evenimentul sql_statement_completed include câmpuri pentru durată, timp CPU, citiri și scrieri.

Evenimentele pot fi sincrone sau asincrone. Evenimentele sincrone se declanșează în timpul operațiunii în sine, în timp ce evenimentele asincrone se declanșează după finalizare. Înțelegerea caracteristicilor evenimentelor vă ajută să selectați evenimente adecvate pentru nevoile dvs. de monitorizare.

2.4 Acțiuni

Acțiunile adaugă informații suplimentare evenimentelor capturate. Când se declanșează un eveniment, se execută acțiuni asociate pentru a colecta context suplimentar, cum ar fi text SQL, ID-ul sesiunii sau informații despre stiva de apeluri.

Acțiunile comune includ sql_text pentru a captura instrucțiuni de interogare, database_name pentru a identifica baza de date și client_hostname pentru a urmări serverul de origine. Acțiunile oferă context esențial pentru depanare și analiză.

2.5 ținte

Țintele determină cum și unde sunt stocate datele evenimentelor. SQL Server Evenimentele extinse acceptă mai multe tipuri de ținte, inclusiv:

  • fișier_event pentru stocare pe disc, oferind stocare persistentă pentru analize detaliate
  • ring_buffer pentru retenție bazată pe memorie, oferind acces rapid la evenimente recente cu costuri minime
  • event_counter pentru numărare simplă
  • histogramă pentru grupare
  • pair_matching pentru corelarea evenimentelor conexe

2.6 Predicate (Filtre)

Predicatele filtrează evenimentele pe baza unor condiții specificate, reducând volumul datelor capturate. Puteți filtra după numele bazei de date, numele aplicației, ID-ul sesiunii, pragurile de durată sau orice valoare a câmpului evenimentului.

Utilizarea eficientă a predicatelor minimizează impactul asupra performanței prin captarea doar a evenimentelor relevante. Predicatele complexe combină mai multe condiții folosind operatori logici pentru a crea criterii precise de filtrare.

3. Stările și ciclul de viață al sesiunilor de evenimente extinse

3.1 Stări de sesiune: CREATE, ALTER și DROP

Sesiunile de eveniment extins progresează prin stări distincte:

  • Instrucțiunea CREATE EVENT SESSION definește o sesiune nouă, dar nu o pornește. Sesiunea există într-o stare oprită până când este activată explicit.
  • Instrucțiunea ALTER EVENT SESSION modifică configurația sesiunii sau îi schimbă starea între oprit și pornit.
  • Instrucțiunea DROP EVENT SESSION elimină complet definiția sesiunii de pe server.

3.2 Conținutul și caracteristicile sesiunii

Fiecare sesiune conține o colecție de evenimente, acțiuni, ținte și predicate. Sesiunile au limite implicite care le definesc domeniul de aplicare și comportamentul. Opțiunile de configurare controlează alocarea memoriei, păstrarea evenimentelor și latența dispecerizării.

Caracteristicile sesiunilor includ dacă acestea persistă după repornirea serverului, alocarea maximă de memorie și modul în care gestionează presiunea memoriei. Aceste setări au un impact semnificativ asupra comportamentului sesiunii și a consumului de resurse.

3.3 Limite de sesiune și pachete

Limitele sesiunilor definesc relațiile dintre evenimente, ținte și pachete. Evenimentele dintr-un pachet pot declanșa acțiuni dintr-un alt pachet, oferind flexibilitate în strategiile de colectare a datelor.

Relațiile dintre pachete vă permit să combinați evenimente din mai multe surse într-o singură sesiune. Această funcționalitate permite scenarii de monitorizare cuprinzătoare care acoperă diferite SQL Server subsisteme.

4. Crearea de sesiuni de evenimente extinse folosind SSMS

4.1 Cerințe preliminare și configurare

Înainte de a crea SQL Server Pentru sesiunile Evenimente extinse, asigurați-vă că aveți permisiunile corespunzătoare. Aveți nevoie de permisiunea ALTER ANY EVENT SESSION pentru sesiunile cu domeniul de activitate al serverului sau de permisiunea CONTROL asupra bazei de date pentru sesiunile cu domeniul de activitate al bazei de date.

Verificați asta SQL Server Management Studio este instalat și conectat la instanța țintă. Familiarizați-vă cu cerințele de monitorizare și identificați evenimentele și țintele care se potrivesc cel mai bine nevoilor dumneavoastră.

4.2 Accesarea evenimentelor extinse în Object Explorer

Pentru a accesa interfața Evenimente extinse în SSMS, urmați acești pași:

  1. Operatii Deschise SQL Server Management Studio și conectați-vă la dvs. SQL Server instanță.
  2. În Exploratorul de obiecte, extindeți Management -> Evenimente extinse.
  3. Nodul Evenimente extinse conține Sesiuni și Pachete foldere pentru gestionarea configurațiilor de monitorizare.

Accesați interfața Evenimente extinse în SQL Server Studio de management.

4.3 Creați o sesiune nouă

Pentru a crea o sesiune nouă:

    1. Faceți clic dreapta pe Sesiuni dosarul de sub Evenimente extinse.
    2. Selectați Sesiune nouă pentru a deschide caseta de dialog de configurare. Următorul conținut va folosi această metodă pentru a crea o sesiune nouă.

Creați o nouă sesiune de evenimente extinse în SQL Server Studio de management.

Nota: Asistent pentru sesiune nouă este disponibil și pentru o experiență mai ghidată.

4.3.1 Configurarea generală a paginii

Pe General pagină, configurați proprietățile de bază ale sesiunii:

  1. Introduceți un nume de sesiune în Numele sesiunii câmp. Folosiți nume descriptive care indică scopul monitorizării.
  2. Opțional selectați Porniți sesiunea evenimentului la pornirea serverului pentru a activa automat sesiunea.
  3. Șablonul implicit de sesiune este luminosPuteți utiliza și alte șabloane dacă utilizați o configurație predefinită.

Pagina generală a sesiunii Evenimente extinse din SQL Server Studio de management.

4.3.2 Configurarea paginii de evenimente

Evenimente pagina vă permite să selectați evenimentele pe care doriți să le monitorizați:

  1. selectaţi Evenimente pagină din stânga Selectați o pagină panou.
  2. În Bibliotecă de evenimente, răsfoiți evenimentele disponibile sau folosiți funcția de căutare.
  3. Filtrați evenimentele tastând cuvinte cheie precum „sql_statement_completed” pentru a găsi evenimente relevante.
  4. Selectați evenimentul dorit, cum ar fi sql_statement_completed.
  5. Faceți clic pe butonul săgeată dreapta pentru a muta evenimentul în Evenimente selectate listă.

Pagina de evenimente a sesiunii Evenimente extinse din SQL Server Studio de management.

4.3.3 Configurarea stocării datelor

Stocarea datelor pagina definește unde sunt stocate datele evenimentelor:

  1. selectaţi Stocarea datelor pagină din stânga Selectați o pagină panou.
  2. În Obiective zonă, alegeți un tip de țintă din meniul derulant.

Pagina de stocare a datelor din sesiunea Evenimente extinse din SQL Server Studio de management.

(1) fișier_event_file țintă

Ținta event_file stochează datele în fișiere de pe disc cu extensia .xel:

  1. Selectați fișier_eveniment din meniul derulant pentru tipul de țintă.
  2. Specificați calea fișierului, cum ar fi C:\temp\YourSession_Target.xel.
  3. Configurați opțiunile de rollover pentru a gestiona spațiul pe disc prin setarea dimensiunii maxime a fișierelor și a numărului de fișiere.
  4. Ținta scrie evenimente continuu până când sesiunea se oprește sau se ating limitele de stocare.

Setați ținta sesiunii la event_file în SSMS

(2) țintă ring_buffer

Ținta ring_buffer stochează evenimentele în memorie pentru acces rapid fără I/O pe disc:

  1. Selectați tampon_inelar ca tip de țintă.
  2. Configurați alocarea maximă de memorie pentru buffer.
  3. Rețineți că evenimentele mai vechi sunt eliminate atunci când buffer-ul se umple, ceea ce face ca acest lucru să fie potrivit pentru monitorizarea activității recente.

Setați ținta la ring_buffer pentru sesiunea Evenimente extinse din SQL Server Studio de management.

(3) Țintă contor_evenimente

Ținta event_counter numără pur și simplu aparițiile evenimentelor fără a stoca date detaliate. Aceasta oferă o suprasarcină minimă atunci când aveți nevoie doar de informații despre frecvență.

Setați ținta la event_counter pentru sesiunea Evenimente extinse din SQL Server Studio de management.

(4) histogramă țintă

Histograma țintă grupează evenimentele după o valoare specificată a câmpului, creând statistici de distribuție. Acest lucru este util pentru identificarea tiparelor comune sau a valorilor cu frecvență ridicată.

Setați ținta la histogramă pentru sesiunea Evenimente extinse în SQL Server Studio de management.

(5) Țintă de potrivire a perechilor

Ținta pair_matching corelează evenimente conexe, cum ar fi achiziționarea și eliberarea blocării. Aceasta permite analiza operațiilor pereche și a relațiilor lor temporale.

Setați ținta sesiunii la pair_matching în SSMS

4.3.4 Setări avansate

Avansat pagina oferă opțiuni de configurare la nivel de sesiune:

  1. selectaţi Avansat pagină din stânga Selectați o pagină panou.
  2. Configurați Mod de păstrare a evenimentelor pentru a controla modul în care evenimentele sunt gestionate sub presiunea memoriei.
  3. set Latență maximă de expediere pentru a echilibra procesarea în timp real cu performanța sistemului.
  4. Configurați Dimensiune maximă a memoriei și Dimensiunea maximă a evenimentului în funcție de cerințele dumneavoastră de monitorizare.
  5. Selectați Mod de partiționare a memoriei pentru a optimiza pentru medii cu unul sau mai multe procesoare.

Pagina avansată a sesiunii în SQL Server Studio de management.

4.4 Configurarea filtrelor de evenimente (predicate)

Predicatele reduc volumul de date prin filtrarea evenimentelor pe baza unor criterii specifice. Pentru a configura filtrele:

  1. Pe Evenimente pagina, selectați evenimentul pe care doriți să îl filtrați, cum ar fi „sql_statement_completed”.
  2. Clic Configurați pentru a deschide caseta de dialog de configurare a evenimentului.
    Configurați evenimentul unei sesiuni Evenimente extinse în SQL Server Studio de management.
  3. selectaţi Filtru (predicat) tab.
  4. În Câmp meniu derulant, alegeți câmpul după care doriți să filtrați, cum ar fi durata.
  5. Selectați un Operator, cum ar fi „>”.
  6. Introduceți filtrul Valoare, cum ar fi 1000000 (1 secundă).
  7. Adăugați mai multe condiții dacă este necesar.

Configurați filtrele (predicatele) pentru un eveniment.

4.5 Selectarea acțiunilor și a câmpurilor de evenimente

Pentru fiecare eveniment, puteți selecta datele care vor fi colectate:

  1. Pe Evenimente pagină, selectați evenimentul pentru care doriți să selectați datele, cum ar fi „sql_statement_completed”.
  2. Clic Configurați pentru a deschide caseta de dialog de configurare a evenimentului.
  3. selectaţi Câmpuri globale (acțiuni) tab.
  4. Selectați acțiuni pentru a adăuga informații suplimentare, cum ar fi database_name sau client_app_name.
    Configurați acțiunile unui eveniment.
  5. Revizuirea Câmpuri de evenimente secțiune pentru a vedea ce câmpuri sunt capturate automat.
  6. Ștergeți toate câmpurile inutile pentru a reduce volumul de date.
    Configurați câmpurile unui eveniment.

4.6 Pornirea și gestionarea sesiunilor

După configurarea sesiunii, o puteți porni și monitoriza funcționarea acesteia:

  1. Clic OK pentru a crea sesiunea.
  2. În Exploratorul de obiecte, extindeți Sesiuni dosar pentru a vedea noua sesiune.
  3. Faceți clic dreapta pe numele sesiunii și selectați Începe sesiunea pentru a începe să surprindem evenimentele.
    Începeți o sesiune Evenimente extinse în SQL Server Studio de management.
  4. Pentru a vizualiza datele în timp real, faceți clic dreapta pe sesiune și selectați Urmăriți date în timp real.
    Urmăriți datele live ale unei sesiuni de Evenimente Extinse în SQL Server Studio de management.
  5. Opriți sesiunea făcând clic dreapta și selectând Opriți sesiunea.

5. Crearea sesiunilor de evenimente extinse folosind T-SQL

5.1 Sintaxa comenzii CREATE EVENT SESSION

Crearea sesiunilor Extended Event cu T-SQL oferă un control precis și permite scriptarea pentru implementare automată. Instrucțiunea CREATE EVENT SESSION urmează o structură sintactică specifică.

Sintaxa de bază include numele sesiunii, clauzele ADD EVENT pentru fiecare eveniment, clauzele ADD TARGET pentru destinațiile de stocare și clauzele WITH opționale pentru configurarea sesiunii.

5.2 Crearea unei sesiuni de evenimente de bază

O sesiune de bază monitorizează evenimente specifice și scrie rezultatele într-o țintă. Iată cum se construiesc componentele esențiale.

5.2.1 Definirea numelui sesiunii și a opțiunilor

Începeți prin a crea sesiunea cu un nume descriptiv:

CREATE EVENT SESSION [SampleSession] ON SERVER

Clauza ON SERVER creează o sesiune cu domeniul de activitate al serverului care persistă în timpul modificărilor bazei de date. Pentru Azure SQL Database, utilizați ON DATABASE pentru sesiunile cu domeniul de activitate al bazei de date.

5.2.2 Adăugarea de evenimente cu ADD EVENT

Adăugați evenimente de capturat folosind clauza ADD EVENT:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed

Aceasta capturează toate instrucțiunile SQL completate. Puteți adăuga mai multe evenimente prin includerea unor clauze ADD EVENT suplimentare.

5.2.3 Configurarea acțiunilor de eveniment

Acțiunile colectează context suplimentar pentru fiecare eveniment. Adăugați acțiuni între paranteze după numele evenimentului:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)

Acest exemplu capturează textul SQL, numele bazei de date și numele de utilizator pentru fiecare instrucțiune completată.

5.2.4 Setarea predicatelor de evenimente (clauza WHERE)

Predicate filtrează evenimente pentru a reduce volumul de date. Folosește clauza WHERE în cadrul definiției evenimentului:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text)
    WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)

Aceasta filtrează instrucțiunile cu o durată mai mare de 5 secunde (5,000,000 de microsecunde).

5.3 Adăugarea de obiective de eveniment

Țintele definesc unde sunt stocate datele evenimentelor și cum sunt procesate.

5.3.1 Sintaxa comenzii ADD TARGET

Adăugați ținte folosind clauza ADD TARGET după ce toate evenimentele sunt definite:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel'
)

Prefixul package0 indică faptul că ținta provine din pachetul de bază.

5.3.2 Configurarea parametrilor țintă

Fiecare tip de țintă acceptă parametri specifici. Pentru event_file, configurați filename, max_file_size și max_rollover_files:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel',
        max_file_size=(50),
        max_rollover_files=(5)
)

Această configurație creează fișiere de până la 50 MB fiecare, păstrând până la 5 fișiere prin rollover.

5.4 Opțiuni și setări de sesiune

Clauza WITH configurează opțiunile la nivel de sesiune care controlează comportamentul și utilizarea resurselor.

5.4.1 MAX_MEMORY și EVENT_RETENTION_MODE

Controlul alocării memoriei și al gestionării evenimentelor sub presiune:

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

Opțiunile EVENT_RETENTION_MODE includ ALLOW_SINGLE_EVENT_LOSS pentru utilizare minimă a memoriei, ALLOW_MULTIPLE_EVENT_LOSS pentru o suprasarcină moderată și NO_EVENT_LOSS pentru păstrarea completă a datelor cu prețul unui potențial impact asupra performanței.

5.4.2 LATENCĂ_MAXIMĂ_DE_EXPEDIERE

Setați timpul maxim în care evenimentele pot rămâne în buffere înainte de a fi scrise în ținte:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Valorile mai mici oferă mai multe date în timp real cu prețul creșterii numărului de operațiuni I/O.

5.4.3 MODUL_PARTIȚIE_MEMORIE

Optimizați partiționarea memoriei pentru configurația hardware:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Opțiunile includ NONE pentru o singură partiție, PER_NODE pentru sistemele NUMA și PER_CPU pentru concurență maximă pe sistemele cu mai multe CPU.

5.5 Pornirea, oprirea și modificarea sesiunilor

Gestionați starea și configurația sesiunii prin instrucțiuni ALTER EVENT SESSION.

5.5.1 MODIFICARE SESIUNE EVENIMENT pentru Pornire/Oprire

Începeți o sesiune după creare:

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;

Opriți o sesiune în desfășurare:

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;

5.5.2 Modificarea sesiunilor existente

Modificați configurația sesiunii în timp ce este oprită. Adăugați evenimente:

ALTER EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_batch_completed;

Eliminați evenimentele:

ALTER EVENT SESSION [SampleSession] ON SERVER
DROP EVENT sqlserver.sql_statement_completed;

5.5.3 Eliminarea sesiunilor de evenimente

Eliminați complet o sesiune cu DROP EVENT SESSION:

DROP EVENT SESSION [SampleSession] ON SERVER;

Sesiunea trebuie oprită înainte de a fi abandonată.

6. Lucrul detaliat cu obiectivele de evenimente

6.1 Configurarea țintei event_file

Ținta event_file oferă stocare persistentă pentru datele evenimentelor cu opțiuni de configurare flexibile.

6.1.1 Calea fișierelor și convențiile de denumire

Specificați calea completă și numele fișierului pentru fișierele de evenimente:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel'
)

Folosiți extensia .xel pentru fișierele jurnal de evenimente extinse. Asigurați-vă că SQL Server Contul de serviciu are permisiuni de scriere asupra directorului specificat.

6.1.2 Trecerea fișierelor la alta și gestionarea dimensiunilor

Configurați rularea automată a fișierelor pentru a gestiona spațiul pe disc:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)

Când un fișier ajunge la 50 MB, SQL Server Evenimente extinse creează un fișier nou cu un sufix incrementat. După ce se ajungă la 10 fișiere, cel mai vechi fișier este suprascris.

6.1.3 Citirea datelor din fișierul de evenimente

Interogarea datelor fișierului de evenimente utilizând funcția sys.fn_xe_file_target_read_file:

SELECT
    event_data,
    file_name,
    file_offset
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

Modelul wildcard citește toate fișierele asociate sesiunii.

Utilizarea țintei ring_buffer 6.2

Ținta ring_buffer stochează evenimentele în memorie pentru acces rapid la activitatea recentă.

6.2.1 Stocarea evenimentelor bazată pe memorie

Configurați ring_buffer pentru stocarea bazată pe memorie:

ADD TARGET package0.ring_buffer

Evenimentele rămân accesibile numai cât timp sesiunea este activă și SQL Server rulează. Datele se pierd când sesiunea se oprește sau serverul repornește.

6.2.2 Dimensiunea și configurația bufferului

Controlează alocarea memoriei pentru bufferul inelar:

ADD TARGET package0.ring_buffer(
    SET max_memory=(4096)
)

Specificați memoria în KB. Când buffer-ul se umple, evenimentele mai vechi sunt eliminate folosind o abordare FIFO.

6.2.3 Interogarea datelor din memoria tampon inelară

Accesați datele din bufferul inelar prin DMV-uri:

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';

target_data conține informații despre evenimente în format XML.

6.3 event_counter Țintă

Ținta event_counter oferă o numărare simplă fără stocare detaliată a datelor:

ADD TARGET package0.event_counter

Această țintă urmărește frecvența evenimentelor cu costuri minime, fiind utilă pentru monitorizarea de volum mare, unde contează doar numărul de evenimente.

6.4 histogramă țintă

Histograma țintă grupează evenimentele după valorile câmpului:

ADD TARGET package0.histogram(
    SET filtering_event_name=N'sqlserver.sql_statement_completed',
        source_type=0,
        source=N'database_name'
)

Această configurație creează o histogramă care arată distribuția evenimentelor în bazele de date.

6.5 perechi_potrivite țintă

Ținta pair_matching corelează evenimente conexe, cum ar fi achizițiile de blocări, cu versiunile:

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'
)

Acest lucru permite analiza operațiilor pereche și a duratelor acestora.

7. Vizualizarea și analizarea datelor despre evenimente extinse

7.1 Utilizarea SSMS pentru vizualizarea datelor în timp real

SQL Server Management Studio oferă o interfață grafică pentru vizualizarea datelor Evenimente Extinse în timp real:

  1. În Exploratorul de obiecte, extindeți Management -> Evenimente extinse -> Sesiuni.
  2. Faceți clic dreapta pe sesiunea activă.
  3. Selectați Urmăriți date în timp real pentru a deschide vizualizatorul de date live.
    Urmăriți datele live ale unei sesiuni de Evenimente Extinse în SQL Server Studio de management.
  4. Evenimentele apar în grilă pe măsură ce se produc.
  5. Faceți clic pe evenimente individuale pentru a vizualiza valorile detaliate ale câmpurilor în panoul cu detalii.
    Urmăriți datele în direct ale evenimentelor, inclusiv detaliile evenimentului.
  6. Folosește filtrele din bara de instrumente pentru a te concentra pe anumite tipuri de evenimente sau valori de câmp.

7.2 Interogarea datelor fișierelor de evenimente cu T-SQL

Interogările T-SQL oferă o analiză flexibilă a datelor de evenimente capturate.

7.2.1 Funcția sys.fn_xe_file_target_read_file

Citiți datele fișierului de evenimente folosind această funcție de sistem:

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
);

Funcția returnează un rând per eveniment cu detalii în format XML.

7.2.2 Analizarea datelor de evenimente XML

Extrageți valori specifice din datele evenimentului XML:

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;

Expresiile XQuery extrag valori individuale ale câmpurilor din structura XML.

7.2.3 Conversia datelor de evenimente în tabele

Creați seturi de rezultate structurate din datele evenimentelor:

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 Interogarea datelor din memoria tampon inelară

Extrageți datele din țintele ring_buffer:

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 Vizualizări de sistem pentru evenimente extinse

SQL Server oferă mai multe vizualizări DMV și de catalog pentru gestionarea și monitorizarea sesiunilor de evenimente extinse.

7.4.1 sys.server_event_sessions

Vizualizați definițiile de sesiune stocate pe server:

SELECT
    name,
    event_retention_mode_desc,
    max_dispatch_latency,
    max_memory,
    max_event_size,
    memory_partition_mode_desc
FROM sys.server_event_sessions;

Această vizualizare de catalog afișează detalii de configurare pentru toate sesiunile definite.

7.4.2 sys.dm_xe_sessions

Vizualizați sesiunile active în prezent:

SELECT
    name,
    create_time,
    total_regular_buffers,
    regular_buffer_size,
    total_large_buffers,
    large_buffer_size
FROM sys.dm_xe_sessions;

Acest DMV oferă informații în timpul execuției despre sesiunile active de evenimente extinse.

7.4.3 sys.dm_xe_session_targets

Vizualizați țintele asociate cu sesiunile active:

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 Alte DMV-uri utile

Vizualizările suplimentare oferă informații complete despre sesiune:

  • sys.dm_xe_session_events: Listează evenimentele din sesiunile active
  • sys.dm_xe_session_event_actions: Afișează acțiunile configurate pentru evenimentele de sesiune
  • sys.dm_xe_objects: Catalogează toate evenimentele, acțiunile și țintele disponibile
  • sys.dm_xe_object_columns: Câmpuri de detalii disponibile pentru fiecare tip de eveniment
  • sys.dm_xe_packages: Listează toate pachetele de evenimente extinse

8. Cazuri practice de utilizare și exemple

8.1 Monitorizarea execuției instrucțiunilor SQL

Urmărirea execuției instrucțiunilor SQL oferă informații despre modelele de interogări și caracteristicile de performanță.

8.1.1 Urmărirea evenimentelor sql_statement_completed

Creați o sesiune pentru a monitoriza instrucțiunile SQL finalizate:

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 Filtrarea după baza de date sau aplicație

Concentrați-vă pe baze de date sau aplicații specifice folosind predicate:

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 Capturarea informațiilor despre blocaje

Analiza blocajelor necesită capturarea de informații detaliate despre tranzacțiile conflictuale.

8.2.1 Eveniment xml_deadlock_report

Creați o sesiune pentru a captura grafice complete de blocaje:

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 Analizarea graficelor de blocaje

Extragerea și analizarea informațiilor despre blocaje:

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';

Graficul de blocaje conține detalii despre procese, resurse și selecția victimei.

8.3 Probleme de performanță ale interogărilor de urmărire

Identificați interogările cu performanțe slabe utilizând indicatori de durată și consum de resurse.

8.3.1 Detectarea interogărilor cu execuție lungă

Capturați interogările care depășesc anumite praguri de durată:

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 Analiza planului de execuție

Capturați planurile de interogare pentru analiza performanței:

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 Monitorizarea evenimentelor de conectare și securitate

Urmăriți activitățile de autentificare și autorizare pentru auditarea securității.

8.4.1 Urmărirea succesului și eșecului conectării

Monitorizați atât încercările de conectare reușite, cât și pe cele eșuate:

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 Modificări ale permisiunilor

Modificări ale permisiunilor de securitate ale urmăririi:

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 Monitorizare la nivel de bază de date

Monitorizați operațiunile specifice bazei de date și modificările de stare.

8.5.1 Evenimente de backup și restaurare

Urmărirea operațiunilor de backup și restaurare:

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 Modificări ale stării bazei de date

Monitorizați tranzițiile de stare ale bazei de date:

CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER
ADD EVENT sqlserver.database_started,
ADD EVENT sqlserver.database_stopped
ADD TARGET package0.ring_buffer;

8.6 Detectarea problemelor de corupție și integritate a bazei de date

SQL Server Evenimentele extinse oferă capacități de avertizare timpurie pentru detectarea potențialei corupții a bazei de date, permițând intervenția proactivă înainte ca problemele să escaladeze.

8.6.1 Evenimente cheie pentru detectarea corupției

Mai multe evenimente semnalează potențiale probleme de corupere sau I/O.

8.6.1.1 Eveniment error_reported pentru erori critice

Evenimentul error_reported capturează toate SQL Server erori, inclusiv numere de eroare legate de corupție:

ADD EVENT sqlserver.error_reported(
    WHERE (
        [severity] >= (20)
        OR [error_number] IN (823, 824, 825, 832, 855, 856)
    )
)

Eroarea 823 indică erori I/O, 824 semnalează erori de consistență logică, iar 825 raportează succese ale reîncercărilor de citire, care pot indica probleme hardware.

8.6.1.2 Evenimentul database_suspect_data_page

Acest eveniment se declanșează atunci când SQL Server întâlnește o pagină suspectă:

ADD EVENT sqlserver.database_suspect_data_page

Paginile suspecte indică o potențială corupere și sunt înregistrate în tabelul msdb.dbo.suspect_pages.

8.6.1.3 eveniment errorlog_written

Capturați intrările scrise în SQL Server jurnal de erori:

ADD EVENT sqlserver.errorlog_written(
    WHERE ([severity] >= (16))
)

8.6.2 Crearea unei sesiuni de monitorizare a corupției

Organizați o sesiune cuprinzătoare pentru detectarea și monitorizarea corupției.

8.6.2.1 Filtrarea pentru numerele de eroare de corupție (823, 824, 825)

Creați o sesiune specifică axată pe indicatorii de corupție:

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 Stabilirea nivelurilor de severitate adecvate

Includeți erori de gravitate ridicată care pot indica corupție:

WHERE (
    [severity] >= (20)
    OR [error_number] IN (823, 824, 825)
)

Severitatea 20 și peste indică probleme la nivel de sistem care sunt adesea legate de corupție.

8.6.2.3 Configurarea fișierului de evenimente țintă pentru alerte

Stocarea evenimentelor de corupție pentru analiză și alertare:

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 Analizarea datelor privind evenimentele de corupție

Extrageți și interpretați evenimente legate de corupție din datele colectate.

8.6.3.1 Identificarea paginilor suspecte

Interogare pentru evenimentele database_suspect_data_page:

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 Extragerea detaliilor și contextului erorii

Analizați evenimentele error_reported pentru modele de corupție:

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 Integrare cu DBCC CHECKDB

Folosește datele Evenimentelor Extinse pentru ghidare DBCC CHECKDB execuţie.

8.6.4.1 Declanșarea DBCC CHECKDB pe baza evenimentelor

Când sunt detectate evenimente de corupție, executați DBCC CHECKDB pentru validare completă:

-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Evenimentele extinse oferă avertizarea timpurie, în timp ce DBCC CHECKDB efectuează o validare amănunțită.

8.6.4.2 Fluxuri de lucru automate pentru răspunsul la corupție

Implementați răspunsuri automate prin monitorizarea fișierului de evenimente:

  1. Configurați SQL Server Sarcină de agent pentru interogarea periodică a fișierului de evenimente de monitorizare a coruperii.
  2. Când se găsesc evenimente de corupere, executați DBCC CHECKDB pe baza de date afectată.
  3. Trimiteți alerte prin e-mail către administratorii de baze de date cu detalii despre evenimente și rezultatele DBCC CHECKDB.
  4. Înregistrați constatările într-un tabel centralizat de monitorizare pentru analiza tendințelor.
8.6.4.3 Echilibrarea monitorizării proactive cu performanța

Evenimentele extinse oferă o detectare a corupției cu costuri reduse în comparație cu execuția frecventă a DBCC CHECKDB:

  • Rulați evenimente extinse în mod continuu pentru detectarea corupției în timp real
  • Execută DBCC CHECKDB numai când apar indicatori de corupție
  • Programați DBCC CHECKDB regulat în timpul ferestrelor de întreținere
  • Utilizați evenimente extinse pentru a identifica ce baze de date necesită atenție imediată

Această abordare oferă monitorizare proactivă fără consumul semnificativ de resurse al verificărilor constante de integritate.

8.6.4.4 Repararea bazei de date corupte

Dacă se detectează corupții în baza de date, puteți utiliza DBCC CHECKDB pentru a remedia corupțiile minore. Dacă eșuează, puteți încerca o soluție terță parte. Instrument de recuperare a bazei de date SQL, care oferă în general o rată de recuperare mai mare pentru bazele de date grav corupte.

9. Evenimente extinse cu scop server vs. cu scop bază de date

9.1 Sesiuni de evenimente cu domeniul de activitate al serverului

Sesiunile cu scop de server monitorizează activitatea pe întregul SQL Server instanță. Aceste sesiuni sunt create cu clauza ON SERVER și persistă în baza de date principală.

CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\ServerWide.xel'
);

Sesiunile la nivel de server capturează evenimente din toate bazele de date și sunt potrivite pentru monitorizarea la nivel de instanță.

9.2 Sesiuni de evenimente cu domeniul bazei de date (baza de date Azure SQL)

Sesiunile cu aria bazei de date sunt limitate la o singură bază de date și sunt utilizate în principal în baza de date Azure SQL, unde accesul la nivel de server este restricționat:

CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'DatabaseMonitoring.xel'
);

În baza de date Azure SQL, fișierele de evenimente sunt stocate în Azure Blob Storage, nu în sistemele de fișiere locale.

9.3 Diferențe și cazuri de utilizare

Sesiunile la nivel de server oferă monitorizare completă pentru toate bazele de date, dar necesită permisiuni ridicate. Sesiunile la nivel de bază de date oferă izolare și sunt potrivite pentru monitorizarea aplicațiilor sau entităților găzduite specifice.

Utilizați sesiuni cu scop de server pentru monitorizare centralizată, depanare a performanței în bazele de date și auditare a securității. Utilizați sesiuni cu scop de bază de date în Azure SQL Database, medii cu mai mulți entități găzduite sau atunci când delegați responsabilități de monitorizare către echipele de aplicații.

10. Evenimente extinse în baza de date Azure SQL

10.1 Considerații specifice Azure

Baza de date Azure SQL implementează evenimente extinse cu unele diferențe față de mediul local SQL ServerSesiunile sunt în mod implicit în domeniul bazei de date, iar stocarea fișierelor de evenimente utilizează Azure Blob Storage în loc de sistemele de fișiere locale.

Autentificarea la Azure Blob Storage necesită un token SAS configurat în ținta fișierului de evenimente. Șirurile de conexiune fac referire la contul de stocare și la containerul în care sunt stocate fișierele de evenimente.

10.2 Ținte disponibile în Azure

Baza de date Azure SQL acceptă aceste ținte de evenimente extinse:

  • event_file: Scrie în Azure Blob Storage
  • ring_buffer: Stocare bazată pe memorie cu același comportament ca și cea locală
  • event_counter: Numără aparițiile evenimentelor

Ținta event_file necesită configurație cu acreditările Azure Blob Storage:

ADD TARGET package0.event_file(
    SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)

10.3 Crearea sesiunilor cu domeniul bazei de date

Creați o sesiune în baza de date Azure SQL:

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;

Sesiunile Azure cu domeniul de aplicare al bazei de date se comportă similar cu sesiunile locale cu domeniul de aplicare al serverului, dar cu domeniul de aplicare limitat la baza de date curentă.

11. Cele mai bune practici și optimizarea performanței

11.1 Minimizarea impactului asupra performanței

Evenimentele extinse sunt concepute pentru costuri minime, dar configurarea necorespunzătoare poate afecta performanța. Urmați aceste instrucțiuni:

  • Folosește predicate specifice pentru a filtra evenimentele, în loc să capturezi totul
  • Evitați colectarea acțiunilor inutile care adaugă costuri suplimentare de procesare
  • Alegeți obiective adecvate în funcție de nevoile de păstrare a datelor
  • Setați dimensiuni rezonabile ale bufferelor și latențelor de expediere
  • Monitorizați consumul de resurse al sesiunii folosind DMV-uri

11.2 Alegerea evenimentelor și filtrelor potrivite

Selectați evenimente care răspund direct obiectivelor dvs. de monitorizare. Evitați evenimentele cu frecvență mare, cu excepția cazului în care este necesar, și aplicați întotdeauna predicate pentru a reduce volumul de date.

De exemplu, în loc să capturați toate evenimentele sql_statement_completed, filtrați după baze de date specifice sau praguri de durată:

WHERE (
    [sqlserver].[database_name] = N'ProductionDB'
    AND [duration] > 1000000
)

11.3 Reguli de selecție a țintelor

Alegeți țintele în funcție de cerințele analizei dvs.:

  • Folosește event_file pentru analiză istorică detaliată și păstrare pe termen lung
  • Folosește ring_buffer pentru monitorizare în timp real cu impact minim asupra I/O
  • Folosește event_counter când contează doar frecvența
  • Utilizați histograma pentru analiza distribuției
  • Folosește pair_matching pentru analiza evenimentelor corelate

11.4 Recomandări de configurare a sesiunii

Configurați sesiunile cu limite de resurse corespunzătoare:

  • Setați MAX_MEMORY pe baza volumului așteptat de evenimente și a resurselor serverului
  • Folosește ALLOW_SINGLE_EVENT_LOSS pentru costuri minime în majoritatea scenariilor
  • Setați MAX_DISPATCH_LATENCY pentru a echilibra nevoile în timp real cu performanța
  • Utilizarea partiționării memoriei PER_CPU pe sistemele multiprocesor
  • Evitați STARTUP_STATE=ON decât dacă este necesară monitorizarea continuă

11.5 Gestionarea dimensiunii și păstrării fișierelor de evenimente

Configurați rularea fișierelor pentru a preveni utilizarea nelimitată a discului:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Session.xel',
        max_file_size=(100),
        max_rollover_files=(10)
)

Această configurație păstrează aproximativ 1 GB de date despre evenimente (10 fișiere × 100 MB). Ajustați în funcție de cerințele de păstrare și de spațiul de stocare disponibil.

12. Depanarea evenimentelor extinse

12.1 Probleme comune și soluții

Problemele frecvente legate de evenimentele extinse includ sesiunile care nu capturează date, degradarea performanței, problemele legate de fișierele țintă și comportamentul neașteptat al sesiunii.

12.2 Sesiunea nu captează date

Dacă o sesiune nu surprinde evenimentele așteptate:

  1. Verificați dacă sesiunea este pornită folosind sys.dm_xe_sessions.
  2. Verificați predicatele pentru a vă asigura că nu filtrează toate evenimentele.
  3. Confirmați declanșarea evenimentelor eliminând temporar filtrele.
  4. Verificați permisiunile pentru a vă asigura că aveți acces la vizualizarea datelor sesiunii.
  5. Verificați dacă configurația țintei este corectă și permite scrierea.
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Degradarea performanței

Dacă evenimentele extinse cauzează probleme de performanță:

  1. Adăugați predicate pentru a reduce volumul evenimentelor.
  2. Eliminați acțiunile inutile care colectează date suplimentare.
  3. Măriți MAX_DISPATCH_LATENCY pentru a reduce frecvența de scriere.
  4. Schimbați EVENT_RETENTION_MODE în ALLOW_SINGLE_EVENT_LOSS.
  5. Luați în considerare utilizarea ring_buffer în loc de event_file pentru evenimente cu frecvență mare.

12.4 Probleme legate de fișierul țintă

Problemele legate de fișierele țintă sunt adesea legate de permisiuni sau spațiu pe disc:

  1. Verificați SQL Server Contul de serviciu are permisiuni de scriere asupra directorului țintă.
  2. Asigurați-vă că este disponibil suficient spațiu pe disc.
  3. Verificați dacă există calea specificată și este accesibilă.
  4. Verificați configurația de transferare a fișierelor dacă fișierele nu se transferă conform așteptărilor.

12.5 Depanare cu vizualizări de sistem

Folosiți DMV-urile pentru a diagnostica problemele legate de evenimentele extinse:

-- 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. Subiecte avansate

13.1 Crearea de pachete de evenimente personalizate

Utilizatorii avansați pot crea pachete de evenimente personalizate pentru a extinde SQL Server Funcționalitate Evenimente extinse. Aceasta necesită dezvoltare C++ și integrare cu SQL Server cadru de extensibilitate.

Pachetele personalizate permit monitorizarea evenimentelor specifice aplicației sau integrarea sistemelor de monitorizare terțe cu infrastructura Extended Events.

13.2 Șabloane de sesiuni de evenimente

SSMS oferă șabloane încorporate pentru scenarii comune de monitorizare. Accesați șabloanele atunci când creați sesiuni noi prin intermediul expertului:

  1. În caseta de dialog Sesiune nouă, faceți clic pe Format scapă jos.
  2. Selectați dintre șabloanele disponibile, cum ar fi Urmărirea detaliilor interogărilor sau Stările sistemului.
  3. Modificați șablonul pentru a se potrivi cerințelor dvs. specifice.

13.3 Integrarea cu soluții de monitorizare

Datele despre evenimente extinse pot alimenta soluțiile de monitorizare a întreprinderilor:

  • Exportul datelor de evenimente către sisteme centralizate de înregistrare
  • Analizarea fișierelor de evenimente și încărcarea datelor în bazele de date de monitorizare
  • Creați tablouri de bord personalizate folosind instrumente BI
  • Declanșează alerte pe baza unor tipare de evenimente specifice
  • Corela SQL Server evenimente cu metrici de aplicație și infrastructură

13.4 Automatizare și programare

Automatizați gestionarea evenimentelor extinse folosind SQL Server Agenți:

  • Creați joburi pentru a porni/opri sesiunile în anumite ferestre de timp
  • Programarea analizei și raportării fișierelor de evenimente
  • Implementați politici de păstrare a datelor prin arhivarea sau ștergerea fișierelor vechi de evenimente
  • Automatizați răspunsul la condițiile detectate, cum ar fi problemele de performanță sau evenimentele de securitate

14. Migrația din SQL Server profil

14.1 SQL Server Maparea evenimentelor Profiler cu evenimente extinse

Microsoft oferă mapare între SQL Server profil evenimente și evenimente extinse. Mapările comune includ:

  • SQL:BatchCompleted -> sql_batch_completed
  • SQL:BatchStarting -> sql_batch_starting
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starting
  • Grafic de blocaje -> xml_deadlock_raport
  • Autentificare audit -> autentificare
  • Deconectare audit -> deconectare

14.2 Conversia definițiilor de urmărire

Conversia existente SQL Server Profiler urmărește sesiunile Extended Events prin identificarea evenimentelor echivalente și configurarea predicatelor corespunzătoare. SSMS oferă asistență pentru conversiile comune.

Revizuiți filtrele de urmărire și convertiți-le în predicate de evenimente extinse. Acțiunile din evenimente extinse înlocuiesc coloanele de urmărire din SQL Server Profiler.

14.3 Compararea performanțelor

Evenimentele extinse oferă performanțe semnificativ mai bune decât SQL Server Profiler. Studiile comparative arată că evenimentele extinse consumă mai puține cicluri CPU și au un impact mai mic asupra debitului tranzacțiilor.

Evenimentele extinse utilizează procesare asincronă și gestionare optimizată a memoriei, în timp ce SQL Server Profiler se bazează pe captura sincronă de evenimente care se blochează până la finalizarea procesării urmăririi.

15. Concluzie

15.1 Rezumatul conceptelor cheie

SQL Server Extended Events oferă un cadru puternic și ușor pentru monitorizare și depanare SQL ServerArhitectura constă din evenimente, acțiuni, predicate, ținte și sesiuni care funcționează împreună pentru a capta activitatea relevantă a serverului.

Sesiunile pot fi create folosind SSMS sau T-SQL, oferind flexibilitate atât pentru depanarea ad-hoc, cât și pentru monitorizarea automată. Mai multe tipuri de ținte acceptă diferite abordări de analiză, de la monitorizarea în timp real cu ring_buffer până la analiza istorică cu event_file.

Evenimentele extinse oferă performanțe superioare în comparație cu SQL Server Profiler, oferind în același timp capacități de monitorizare mai cuprinzătoare. Sistemul permite administratorilor de baze de date și dezvoltatorilor să diagnosticheze problemele, să optimizeze performanța, să îmbunătățească securitatea și să mențină conformitatea.

15.2 Pașii următori și resurse suplimentare

Pentru a continua să vă dezvoltați SQL Server Expertiza XEvents:

  • Implementați evenimente extinse în medii de testare pentru a dobândi experiență practică
  • Consultați documentația Microsoft pentru cataloage complete de evenimente și referințe detaliate la sintaxă
  • Alatura-te SQL Server forumuri comunitare pentru a învăța din experiențele altora
  • Explorează scenarii avansate precum pachete personalizate și integrare cu platforme de monitorizare
  • Dezvoltați o bibliotecă de șabloane de sesiune pentru scenarii comune de monitorizare

16 Secțiunea Întrebări frecvente

Î: Care sunt SQL Server Evenimente extinse?

A: SQL Server Extended Events este un sistem ușor de monitorizare a performanței integrat în SQL Server Motor de baze de date care captează informații detaliate despre operațiunile serverului cu costuri minime.

Î: Cum diferă evenimentele extinse de SQL Server Profiler?

A: Evenimentele extinse oferă performanțe mai bune, costuri suplimentare mai mici și o configurație mai flexibilă decât SQL Server Profiler. SQL Server Profiler este perimat, iar Microsoft recomandă utilizarea Extended Events pentru toate activitățile de monitorizare.

Î: Pot avea impact evenimentele extinse? SQL Server performanţă?

R: Atunci când sunt configurate corect cu predicate și limite de resurse adecvate, evenimentele extinse au un impact minim asupra performanței. O configurare deficitară fără filtrare poate afecta performanța.

Î: Ce permisiuni sunt necesare pentru a crea sesiuni de evenimente extinse?

A: Aveți nevoie de permisiunea ALTER ANY EVENT SESSION pentru sesiunile din domeniul serverului sau de permisiunea CONTROL asupra bazei de date pentru sesiunile din domeniul bazei de date.

Î: Cum vizualizez datele despre evenimente extinse?

A: Folosește SQL Server Vizualizatorul de date live din Management Studio, interogarea fișierelor de evenimente cu sys.fn_xe_file_target_read_file sau interogarea datelor din bufferul inelar prin DMV-uri.

Î: Pot Evenimentele Extinse detecta coruperea bazei de date?

R: Da, Evenimentele extinse pot captura erori legate de corupție (823, 824, 825) și evenimente suspecte de pagină, oferind avertizări timpurii cu privire la potențiale probleme de corupție.

Î: Care este diferența dintre evenimente, acțiuni și predicate?

A: Evenimentele sunt apariții pe care doriți să le monitorizați. Acțiunile adaugă informații suplimentare evenimentelor capturate. Predicatele filtrează evenimentele pe baza unor condiții pentru a reduce volumul de date.

Î: Cum monitorizez interogările din anumite aplicații sau baze de date?

A: Folosiți predicate în configurația evenimentului pentru a filtra după database_name, client_app_name sau alte câmpuri relevante.

Î: Ce ținte ar trebui să folosesc pentru evenimentele extinse?

A: Folosește event_file pentru stocare persistentă și analiză istorică, ring_buffer pentru monitorizare în timp real cu costuri reduse, event_counter pentru urmărirea simplă a frecvenței și histogram pentru analiza distribuției.

Î: Sunt disponibile evenimente extinse în baza de date Azure SQL?

R: Da, baza de date Azure SQL acceptă evenimente extinse la nivelul bazei de date, cu fișiere de evenimente stocate în Azure Blob Storage.

Î: Cum depanez o sesiune Evenimente extinse care nu capturează date?

A: Verificați dacă sesiunea este pornită, verificați dacă predicatele nu filtrează toate evenimentele, confirmați configurația țintei și examinați permisiunile folosind DMV-urile sistemului.

Î: Pot automatiza gestionarea evenimentelor extinse?

A: Da, folosește SQL Server Sarcini ale agentului pentru pornirea/oprirea sesiunilor, analizarea fișierelor de evenimente, implementarea politicilor de retenție și răspunsul la condițiile detectate.

Referinte


Despre autor

Yuan Sheng este un administrator senior de baze de date (DBA) cu peste 10 ani de experiență în SQL Server medii de lucru și managementul bazelor de date la nivel de întreprindere. A rezolvat cu succes sute de scenarii de recuperare a bazelor de date în cadrul unor organizații din domeniul serviciilor financiare, al sănătății și al producției.

Yuan este specializat în SQL Server recuperarea bazei de date, soluții de înaltă disponibilitateși optimizarea performanței. Experiența sa practică vastă include gestionarea bazelor de date de mai mulți terabyți, implementarea Grupuri de disponibilitate permanentși dezvoltarea de strategii automate de backup și recuperare pentru sistemele critice ale afacerii.

Prin expertiza sa tehnică și abordarea practică, Yuan se concentrează pe crearea de ghiduri complete care ajută administratorii de baze de date și profesioniștii IT să rezolve probleme complexe. SQL Server provocări eficiente. El se menține la curent cu cele mai recente SQL Server versiunilor de software și tehnologiilor de baze de date în continuă evoluție ale Microsoft, testând periodic scenarii de recuperare pentru a se asigura că recomandările sale reflectă cele mai bune practici din lumea reală.

Ai întrebări despre SQL Server recuperare sau aveți nevoie de îndrumări suplimentare pentru depanarea bazei de date? Yuan vă urează bun venit pentru a vă ajuta. feedback și sugestii pentru îmbunătățirea acestor resurse tehnice.

Distribuie acum: