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:
- Operatii Deschise SQL Server Management Studio și conectați-vă la dvs. SQL Server instanță.
- În Exploratorul de obiecte, extindeți Management -> Evenimente extinse.
- Nodul Evenimente extinse conține Sesiuni și Pachete foldere pentru gestionarea configurațiilor de monitorizare.
4.3 Creați o sesiune nouă
Pentru a crea o sesiune nouă:
-
- Faceți clic dreapta pe Sesiuni dosarul de sub Evenimente extinse.
- 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ă.
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:
- Introduceți un nume de sesiune în Numele sesiunii câmp. Folosiți nume descriptive care indică scopul monitorizării.
- Opțional selectați Porniți sesiunea evenimentului la pornirea serverului pentru a activa automat sesiunea.
- Șablonul implicit de sesiune este luminosPuteți utiliza și alte șabloane dacă utilizați o configurație predefinită.
4.3.2 Configurarea paginii de evenimente
Evenimente pagina vă permite să selectați evenimentele pe care doriți să le monitorizați:
- selectaţi Evenimente pagină din stânga Selectați o pagină panou.
- În Bibliotecă de evenimente, răsfoiți evenimentele disponibile sau folosiți funcția de căutare.
- Filtrați evenimentele tastând cuvinte cheie precum „sql_statement_completed” pentru a găsi evenimente relevante.
- Selectați evenimentul dorit, cum ar fi sql_statement_completed.
- Faceți clic pe butonul săgeată dreapta pentru a muta evenimentul în Evenimente selectate listă.
4.3.3 Configurarea stocării datelor
Stocarea datelor pagina definește unde sunt stocate datele evenimentelor:
- selectaţi Stocarea datelor pagină din stânga Selectați o pagină panou.
- În Obiective zonă, alegeți un tip de țintă din meniul derulant.
(1) fișier_event_file țintă
Ținta event_file stochează datele în fișiere de pe disc cu extensia .xel:
- Selectați fișier_eveniment din meniul derulant pentru tipul de țintă.
- Specificați calea fișierului, cum ar fi C:\temp\YourSession_Target.xel.
- 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.
- Ținta scrie evenimente continuu până când sesiunea se oprește sau se ating limitele de stocare.
(2) țintă ring_buffer
Ținta ring_buffer stochează evenimentele în memorie pentru acces rapid fără I/O pe disc:
- Selectați tampon_inelar ca tip de țintă.
- Configurați alocarea maximă de memorie pentru buffer.
- 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.
(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ță.
(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ă.
(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.
4.3.4 Setări avansate
Avansat pagina oferă opțiuni de configurare la nivel de sesiune:
- selectaţi Avansat pagină din stânga Selectați o pagină panou.
- Configurați Mod de păstrare a evenimentelor pentru a controla modul în care evenimentele sunt gestionate sub presiunea memoriei.
- set Latență maximă de expediere pentru a echilibra procesarea în timp real cu performanța sistemului.
- Configurați Dimensiune maximă a memoriei și Dimensiunea maximă a evenimentului în funcție de cerințele dumneavoastră de monitorizare.
- Selectați Mod de partiționare a memoriei pentru a optimiza pentru medii cu unul sau mai multe procesoare.
4.4 Configurarea filtrelor de evenimente (predicate)
Predicatele reduc volumul de date prin filtrarea evenimentelor pe baza unor criterii specifice. Pentru a configura filtrele:
- Pe Evenimente pagina, selectați evenimentul pe care doriți să îl filtrați, cum ar fi „sql_statement_completed”.
- Clic Configurați pentru a deschide caseta de dialog de configurare a evenimentului.
- selectaţi Filtru (predicat) tab.
- În Câmp meniu derulant, alegeți câmpul după care doriți să filtrați, cum ar fi durata.
- Selectați un Operator, cum ar fi „>”.
- Introduceți filtrul Valoare, cum ar fi 1000000 (1 secundă).
- Adăugați mai multe condiții dacă este necesar.
4.5 Selectarea acțiunilor și a câmpurilor de evenimente
Pentru fiecare eveniment, puteți selecta datele care vor fi colectate:
- Pe Evenimente pagină, selectați evenimentul pentru care doriți să selectați datele, cum ar fi „sql_statement_completed”.
- Clic Configurați pentru a deschide caseta de dialog de configurare a evenimentului.
- selectaţi Câmpuri globale (acțiuni) tab.
- Selectați acțiuni pentru a adăuga informații suplimentare, cum ar fi database_name sau client_app_name.
- Revizuirea Câmpuri de evenimente secțiune pentru a vedea ce câmpuri sunt capturate automat.
- Ștergeți toate câmpurile inutile pentru a reduce volumul de date.
4.6 Pornirea și gestionarea sesiunilor
După configurarea sesiunii, o puteți porni și monitoriza funcționarea acesteia:
- Clic OK pentru a crea sesiunea.
- În Exploratorul de obiecte, extindeți Sesiuni dosar pentru a vedea noua sesiune.
- Faceți clic dreapta pe numele sesiunii și selectați Începe sesiunea pentru a începe să surprindem evenimentele.
- Pentru a vizualiza datele în timp real, faceți clic dreapta pe sesiune și selectați Urmăriți date în timp real.
- 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:
- În Exploratorul de obiecte, extindeți Management -> Evenimente extinse -> Sesiuni.
- Faceți clic dreapta pe sesiunea activă.
- Selectați Urmăriți date în timp real pentru a deschide vizualizatorul de date live.
- Evenimentele apar în grilă pe măsură ce se produc.
- Faceți clic pe evenimente individuale pentru a vizualiza valorile detaliate ale câmpurilor în panoul cu detalii.
- 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:
- Configurați SQL Server Sarcină de agent pentru interogarea periodică a fișierului de evenimente de monitorizare a coruperii.
- Când se găsesc evenimente de corupere, executați DBCC CHECKDB pe baza de date afectată.
- Trimiteți alerte prin e-mail către administratorii de baze de date cu detalii despre evenimente și rezultatele DBCC CHECKDB.
- Î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:
- Verificați dacă sesiunea este pornită folosind sys.dm_xe_sessions.
- Verificați predicatele pentru a vă asigura că nu filtrează toate evenimentele.
- Confirmați declanșarea evenimentelor eliminând temporar filtrele.
- Verificați permisiunile pentru a vă asigura că aveți acces la vizualizarea datelor sesiunii.
- 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ță:
- Adăugați predicate pentru a reduce volumul evenimentelor.
- Eliminați acțiunile inutile care colectează date suplimentare.
- Măriți MAX_DISPATCH_LATENCY pentru a reduce frecvența de scriere.
- Schimbați EVENT_RETENTION_MODE în ALLOW_SINGLE_EVENT_LOSS.
- 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:
- Verificați SQL Server Contul de serviciu are permisiuni de scriere asupra directorului țintă.
- Asigurați-vă că este disponibil suficient spațiu pe disc.
- Verificați dacă există calea specificată și este accesibilă.
- 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:
- În caseta de dialog Sesiune nouă, faceți clic pe Format scapă jos.
- Selectați dintre șabloanele disponibile, cum ar fi Urmărirea detaliilor interogărilor sau Stările sistemului.
- 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
- Start rapid: Evenimente extinse în SQL Server – Microsoft Learn
- Prezentare generală extinsă a evenimentelor – Microsoft Learn
- SQL Server Sesiuni de evenimente extinse – Microsoft Learn
- Obiective pentru evenimente extinse în SQL Server – Microsoft Learn
- SQL Server Motor de evenimente extinse – Microsoft Learn
- SQL Server Profiler: Ghid complet
- DBCC CHECKDB: Ghid complet
- DataNumen SQL Recovery
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.

















