Podijeli sada:
Pregled sadržaja sakriti
8. Praktični slučajevi i primjeri upotrebe

1. Uvod

1.1 Što su SQL Server Prošireni događaji?

SQL Server Extended Events je lagani sustav za praćenje performansi koji administratorima i programerima omogućuje prikupljanje i analizu detaljnih podataka o aktivnosti poslužitelja. Ovaj sustav je integriran u SQL Server Database Engine i pruža sveobuhvatan uvid u normalne operacije i scenarije rješavanja problema.

1.2 Zašto koristiti proširene događaje za praćenje?

SQL Server Prošireni događaji nude nekoliko uvjerljivih prednosti za praćenje i rješavanje problema s bazama podataka:

  • Minimalni utjecaj na performanse s laganom arhitekturom
  • Granularna kontrola nad prikupljanjem podataka i filtriranjem događaja
  • Prilagodivo prikupljanje podataka prilagođeno specifičnim potrebama praćenja
  • Mogućnost istovremenog snimanja događaja iz više paketa
  • Fleksibilne mogućnosti filtriranja za fokusiranje na relevantne operacije
  • Podrška za praćenje produkcijskog sustava bez narušavanja korisničkog iskustva
  • Sveobuhvatno praćenje metrika performansi
  • Napredne dijagnostičke mogućnosti za rješavanje problema
  • Održavanje revizijskog traga za zahtjeve usklađenosti
  • Opcije analize podataka u stvarnom vremenu i povijesnih podataka

1.3 Prošireni događaji u odnosu na SQL Server Profiler

Dok su SQL Server Profiler bio je tradicionalni alat za praćenje, MS SQL Extended Events pruža učinkovitiju alternativu. Extended Events troši manje sistemskih resursa i nudi bolju skalabilnost za produkcijska okruženja.

SQL Server Profiler je sada zastario, a Microsoft preporučuje migraciju na proširene događaje za sve aktivnosti praćenja.

2. Razumijevanje arhitekture proširenih događaja

2.1 Komponente mehanizma proširenih događaja

Modul proširenih događaja sastoji se od nekoliko ključnih komponenti koje zajedno rade na prikupljanju, obradi i pohranjivanju podataka o događajima. Razumijevanje ovih komponenti pomaže vam u dizajniranju učinkovitih rješenja za praćenje.

  • Dispečer: Komponenta dispečera koordinira tok događaja od izvora događaja do mehanizma proširenih događaja. Kada se događaj aktivira, dispečer prima obavijest i usmjerava je aktivnim sesijama koje su pretplaćene na tu određenu vrstu događaja.
  • pufer: Međuspremnici privremeno pohranjuju podatke o događajima u memoriju prije pisanja na ciljeve. Ovaj mehanizam međuspremnika poboljšava performanse smanjenjem I/O operacija. Veličina međuspremnika i postavke upravljanja mogu se konfigurirati kako bi se uravnotežila upotreba memorije sa zahtjevima za snimanje podataka.
  • Sjednica: Sesija definira opseg praćenja događaja. Ona određuje koje događaje treba uhvatiti, koje radnje treba izvršiti, koje predikate primijeniti i gdje pohraniti rezultate. Sesije se mogu neovisno stvarati, mijenjati, pokretati i zaustavljati.
  • Ciljna instanca: Ciljne instance predstavljaju odredišta za pohranu snimljenih podataka o događajima. Svaka sesija može pisati na jedan ili više ciljeva, kao što su datoteke, međuspremnici prstenova ili brojači. Ciljevi obrađuju i pohranjuju informacije o događajima za kasniju analizu.

2.2 Paketi događaja

SQL Server Prošireni događaji organiziraju funkcionalnost u pakete. Svaki paket sadrži povezane događaje, radnje, tipove, predikate i ciljeve. Uobičajeni paketi uključuju sqlserver, sqlos i package0.

  • Paket sqlserver pruža događaje specifične za bazu podataka poput upita i transakcija.
  • sqlos paket sadrži događaje operativnog sustava.
  • Paket0 nudi funkcionalnost opće namjene koja se koristi u svim paketima.

2.3 Vrste događaja i polja

Događaji predstavljaju zbivanja unutar SQL Server koje želite pratiti. Svaka vrsta događaja ima unaprijed definirana polja koja bilježe relevantne informacije. Na primjer, događaj sql_statement_completed uključuje polja za trajanje, vrijeme procesora, čitanja i pisanja.

Događaji mogu biti sinkroni ili asinkroni. Sinkroni događaji se aktiviraju tijekom same operacije, dok se asinkroni događaji aktiviraju nakon završetka. Razumijevanje karakteristika događaja pomaže vam da odaberete odgovarajuće događaje za svoje potrebe praćenja.

2.4 dionica

Radnje dodaju dodatne informacije snimljenim događajima. Kada se događaj aktivira, izvršavaju se povezane radnje za prikupljanje dodatnog konteksta kao što su SQL tekst, ID sesije ili informacije o stogu poziva.

Uobičajene akcije uključuju sql_text za hvatanje upita, database_name za identifikaciju baze podataka i client_hostname za praćenje izvornog poslužitelja. Akcije pružaju bitan kontekst za rješavanje problema i analizu.

2.5 mete

Ciljevi određuju kako i gdje se pohranjuju podaci o događajima. SQL Server Prošireni događaji podržavaju više vrsta ciljeva, uključujući:

  • event_file za pohranu na disku, pružajući trajnu pohranu za detaljnu analizu
  • ring_buffer za zadržavanje podataka temeljeno na memoriji, nudeći brz pristup nedavnim događajima uz minimalne troškove
  • brojač_eventova za jednostavno brojanje
  • histogram za grupiranje
  • parno_podudaranje za korelaciju povezanih događaja

2.6 Predikati (Filtri)

Predikati filtriraju događaje na temelju određenih uvjeta, smanjujući količinu snimljenih podataka. Možete filtrirati prema nazivu baze podataka, nazivu aplikacije, ID-u sesije, pragovima trajanja ili bilo kojoj vrijednosti polja događaja.

Učinkovita upotreba predikata minimizira utjecaj na performanse bilježenjem samo relevantnih događaja. Složeni predikat kombinira više uvjeta pomoću logičkih operatora za stvaranje preciznih kriterija filtriranja.

3. Proširena stanja i životni ciklus sesije događaja

3.1 Stanja sesije: STVARANJE, IZMJENA i ISKLJUČIVANJE

Proširene sesije događaja napreduju kroz različita stanja:

  • Naredba CREATE EVENT SESSION definira novu sesiju, ali je ne pokreće. Sesija postoji u zaustavljenom stanju dok se izričito ne aktivira.
  • Naredba ALTER EVENT SESSION mijenja konfiguraciju sesije ili mijenja njezino stanje između zaustavljenog i pokrenutog.
  • Naredba DROP EVENT SESSION u potpunosti uklanja definiciju sesije s poslužitelja.

3.2 Sadržaj i karakteristike sesije

Svaka sesija sadrži kolekciju događaja, akcija, ciljeva i predikata. Sesije imaju implicitne granice koje definiraju njihov opseg i ponašanje. Opcije konfiguracije kontroliraju dodjelu memorije, zadržavanje događaja i latenciju otpreme.

Karakteristike sesije uključuju hoće li se zadržati nakon ponovnog pokretanja poslužitelja, maksimalnu alokaciju memorije i kako se nose s pritiskom memorije. Ove postavke značajno utječu na ponašanje sesije i potrošnju resursa.

3.3 Granice sesije i paketi

Granice sesije definiraju odnose između događaja, ciljeva i paketa. Događaji iz jednog paketa mogu pokrenuti radnje iz drugog paketa, pružajući fleksibilnost u strategijama prikupljanja podataka.

Odnosi paketa omogućuju vam kombiniranje događaja iz više izvora unutar jedne sesije. Ova mogućnost omogućuje sveobuhvatne scenarije praćenja koji obuhvaćaju različite SQL Server podsustavi.

4. Stvaranje proširenih sesija događaja pomoću SSMS-a

4.1 Preduvjeti i postavljanje

Prije stvaranja SQL Server Za proširene sesije događaja provjerite imate li odgovarajuća dopuštenja. Za sesije s opsegom poslužitelja potrebno vam je dopuštenje ALTER ANY EVENT SESSION ili dopuštenje CONTROL za bazu podataka za sesije s opsegom baze podataka.

Potvrdi to SQL Server Management Studio je instaliran i povezan s vašom ciljnom instancom. Upoznajte se sa zahtjevima za praćenje i odredite koji događaji i ciljevi najbolje odgovaraju vašim potrebama.

4.2 Pristup proširenim događajima u Object Exploreru

Za pristup sučelju proširenih događaja u SSMS-u, slijedite ove korake:

  1. Otvoren SQL Server Management Studio i povežite se sa svojim SQL Server primjer.
  2. U Exploreru objekata proširite Upravljanje -> Prošireni događaji.
  3. Čvor Prošireni događaji sadrži sjednice i Paketi mape za upravljanje konfiguracijama praćenja.

Pristupite sučelju proširenih događaja u SQL Server Studio za upravljanje.

4.3 Stvaranje nove sesije

Za stvaranje nove sesije:

    1. Desnom tipkom miša kliknite sjednice mapa ispod Prošireni događaji.
    2. odabrati Nova sjednica za otvaranje dijaloga za konfiguraciju. Sljedeći sadržaj će koristiti ovu metodu za stvaranje nove sesije.

Stvori novu sesiju proširenih događaja u SQL Server Studio za upravljanje.

Napomena: Čarobnjak za novu sesiju također je dostupno za vođenije iskustvo.

4.3.1 Opća konfiguracija stranice

Na Osnovne informacije stranicu, konfigurirajte osnovna svojstva sesije:

  1. Unesite naziv sesije u Naziv sesije polje. Koristite opisne nazive koji označavaju svrhu praćenja.
  2. Izborno odaberite Pokreni sesiju događaja pri pokretanju poslužitelja kako biste omogućili automatsku aktivaciju sesije.
  3. Zadani predložak sesije je PrazanMožete koristiti i druge predloške ako koristite unaprijed definiranu konfiguraciju.

Opća stranica sesije proširenih događaja u SQL Server Studio za upravljanje.

4.3.2 Postavljanje stranice Događaji

The Događaji Stranica vam omogućuje odabir događaja koje želite pratiti:

  1. Odaberite Događaji stranica s lijeva Odaberite stranicu ploča.
  2. u Biblioteka događaja, pregledajte dostupne događaje ili upotrijebite funkciju pretraživanja.
  3. Filtrirajte događaje upisivanjem ključnih riječi kao što je „sql_statement_completed“ kako biste pronašli relevantne događaje.
  4. Odaberite željeni događaj, kao što je sql_statement_completed.
  5. Kliknite gumb sa strelicom udesno da biste premjestili događaj na Odabrani događaji popis.

Stranica Događaji sesije Prošireni događaji u SQL Server Studio za upravljanje.

4.3.3 Konfiguracija pohrane podataka

The Pohranu podataka stranica definira gdje se pohranjuju podaci o događajima:

  1. Odaberite Pohranu podataka stranica s lijeva Odaberite stranicu ploča.
  2. u Mete područje, odaberite vrstu cilja s padajućeg izbornika.

Stranica za pohranu podataka sesije proširenih događaja u SQL Server Studio za upravljanje.

(1) Cilj datoteke_događaja

Cilj event_file pohranjuje podatke u datoteke na disku s ekstenzijom .xel:

  1. odabrati datoteka_događaja iz padajućeg izbornika vrste cilja.
  2. Navedite putanju datoteke, kao što je C:\temp\VašaCilj_Sesije.xel.
  3. Konfigurirajte opcije prebacivanja miša za upravljanje prostorom na disku postavljanjem maksimalne veličine i broja datoteka.
  4. Cilj kontinuirano zapisuje događaje sve dok se sesija ne zaustavi ili se ne dosegnu ograničenja pohrane.

Postavite cilj sesije na event_file u SSMS-u

(2) Cilj ring_buffera

Cilj ring_buffer pohranjuje događaje u memoriju za brzi pristup bez diskovnog I/O:

  1. odabrati prstenasti_međuspremnik kao ciljni tip.
  2. Konfigurirajte maksimalnu alokaciju memorije za međuspremnik.
  3. Imajte na umu da se stariji događaji odbacuju kada se međuspremnik napuni, što ovo čini prikladnim za praćenje nedavnih aktivnosti.

Postavite cilj na ring_buffer za sesiju proširenih događaja u SQL Server Studio za upravljanje.

(3) brojač_događaja Cilj

Cilj event_counter jednostavno broji pojave događaja bez pohranjivanja detaljnih podataka. To osigurava minimalno opterećenje kada su vam potrebne samo informacije o učestalosti.

Postavite cilj na event_counter za sesiju proširenih događaja u SQL Server Studio za upravljanje.

(4) Cilj histograma

Histogram ciljano grupira događaje prema određenoj vrijednosti polja, stvarajući statistiku distribucije. To je korisno za identificiranje uobičajenih obrazaca ili vrijednosti visoke učestalosti.

Postavite cilj na histogram za sesiju proširenih događaja u SQL Server Studio za upravljanje.

(5) Cilj podudaranja parova

Cilj pair_matching povezuje povezane događaje poput stjecanja i otpuštanja brave. To omogućuje analizu uparenih operacija i njihovih vremenskih odnosa.

Postavite cilj sesije na pair_matching u SSMS-u

4.3.4 Napredne postavke

The napredan stranica nudi opcije konfiguracije na razini sesije:

  1. Odaberite napredan stranica s lijeva Odaberite stranicu ploča.
  2. konfigurirati Način zadržavanja događaja kontrolirati kako se događaji obrađuju pod pritiskom memorije.
  3. Postaviti Maksimalna latencija otpreme kako bi se uravnotežila obrada u stvarnom vremenu s performansama sustava.
  4. konfigurirati Maksimalna veličina memorije i Maksimalna veličina događaja na temelju vaših zahtjeva za praćenje.
  5. odabrati Način particije memorije za optimizaciju za okruženja s jednim ili više procesora.

Napredna stranica sesije u SQL Server Studio za upravljanje.

4.4 Konfiguriranje filtera događaja (predikata)

Predikati smanjuju količinu podataka filtriranjem događaja na temelju određenih kriterija. Za konfiguriranje filtera:

  1. Na Događaji stranicu odaberite događaj koji želite filtrirati, kao što je „sql_statement_completed“.
  2. Kliknite konfigurirati za otvaranje dijaloga za konfiguraciju događaja.
    Konfigurirajte događaj sesije proširenih događaja u SQL Server Studio za upravljanje.
  3. Odaberite Filtar (predikat) Tab.
  4. u Polje padajućeg izbornika odaberite polje za filtriranje, kao što je trajanje.
  5. Odaberite an Operator, kao što je „>“.
  6. Unesite filter Još malo brojeva, kao što je 1000000 (1 sekunda).
  7. Po potrebi dodajte još uvjeta.

Konfigurirajte filtere (predikate) za događaj.

4.5 Odabir polja radnji i događaja

Za svaki događaj možete odabrati podatke koji će se prikupljati:

  1. Na Događaji Na stranici odaberite događaj za koji želite odabrati podatke, kao što je „sql_statement_completed“.
  2. Kliknite konfigurirati za otvaranje dijaloga za konfiguraciju događaja.
  3. Odaberite Globalna polja (radnje) Tab.
  4. Odaberite radnje za dodavanje dodatnih informacija, kao što su naziv_baze_podataka ili naziv_klijentske_aplikacije.
    Konfigurirajte radnje događaja.
  5. Pregledajte Polja događaja odjeljak da biste vidjeli koja se polja automatski bilježe.
  6. Izbrišite sva nepotrebna polja kako biste smanjili količinu podataka.
    Konfigurirajte polja događaja.

4.6 Pokretanje i upravljanje sesijama

Nakon što konfigurirate sesiju, možete je pokrenuti i pratiti njezin rad:

  1. Kliknite OK za stvaranje sesije.
  2. U Exploreru objekata proširite sjednice mapu da biste vidjeli svoju novu sesiju.
  3. Desnom tipkom miša kliknite naziv sesije i odaberite Započni sjednicu za početak snimanja događaja.
    Započnite sesiju proširenih događaja u SQL Server Studio za upravljanje.
  4. Za pregled podataka uživo, desnom tipkom miša kliknite sesiju i odaberite Gledajte podatke uživo.
    Gledajte podatke uživo sesije proširenih događaja u SQL Server Studio za upravljanje.
  5. Zaustavite sesiju klikom desne tipke miša i odabirom Zaustavi sesiju.

5. Stvaranje proširenih sesija događaja pomoću T-SQL-a

5.1 Sintaksa STVARANJA SESIJE DOGAĐAJA

Stvaranje proširenih sesija događaja pomoću T-SQL-a pruža preciznu kontrolu i omogućuje skriptiranje za automatizirano postavljanje. Naredba CREATE EVENT SESSION slijedi određenu sintaktičku strukturu.

Osnovna sintaksa uključuje naziv sesije, klauzule ADD EVENT za svaki događaj, klauzule ADD TARGET za odredišta pohrane i opcionalne klauzule WITH za konfiguraciju sesije.

5.2 Izrada osnovne sesije događaja

Osnovna sesija prati određene događaje i zapisuje rezultate u cilj. Evo kako konstruirati bitne komponente.

5.2.1 Definiranje naziva i opcija sesije

Započnite stvaranjem sesije s opisnim nazivom:

CREATE EVENT SESSION [SampleSession] ON SERVER

Klauzula ON SERVER stvara sesiju s opsegom poslužitelja koja traje i nakon promjena u bazi podataka. Za Azure SQL bazu podataka koristite ON DATABASE za sesije s opsegom baze podataka.

5.2.2 Dodavanje događaja pomoću naredbe DODAJ DOGAĐAJ

Dodajte događaje za snimanje pomoću klauzule ADD EVENT:

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

Ovo obuhvaća sve dovršene SQL naredbe. Možete dodati više događaja uključivanjem dodatnih ADD EVENT klauzula.

5.2.3 Konfiguriranje radnji događaja

Radnje prikupljaju dodatni kontekst za svaki događaj. Dodajte radnje unutar zagrada nakon naziva događaja:

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

Ovaj primjer bilježi SQL tekst, naziv baze podataka i korisničko ime za svaku dovršenu naredbu.

5.2.4 Postavljanje predikata događaja (klauzula WHERE)

Predikati filtriraju događaje kako bi smanjili količinu podataka. Koristite klauzulu WHERE unutar definicije događaja:

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

Ovo filtrira naredbe s trajanjem duljim od 5 sekundi (5,000,000 mikrosekundi).

5.3 Dodavanje ciljeva događaja

Ciljevi definiraju gdje se pohranjuju podaci događaja i kako se obrađuju.

5.3.1 Sintaksa DODAVANJA CILJA

Dodajte ciljeve pomoću klauzule ADD TARGET nakon što su definirani svi događaji:

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

Prefiks package0 označava da cilj dolazi iz osnovnog paketa.

5.3.2 Konfiguriranje ciljnih parametara

Svaka vrsta cilja prihvaća specifične parametre. Za event_file konfigurirajte 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)
)

Ova konfiguracija stvara datoteke veličine do 50 MB, održavajući do 5 datoteka putem prijenosa podataka.

5.4 Opcije i postavke sesije

Klauzula WITH konfigurira opcije na razini sesije koje kontroliraju ponašanje i korištenje resursa.

5.4.1 MAX_MEMORY i EVENT_RETENTION_MODE

Kontrolirajte alokaciju memorije i rukovanje događajima pod pritiskom:

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

Opcije EVENT_RETENTION_MODE uključuju ALLOW_SINGLE_EVENT_LOSS za minimalnu upotrebu memorije, ALLOW_MULTIPLE_EVENT_LOSS za umjereno opterećenje i NO_EVENT_LOSS za potpuno zadržavanje podataka uz potencijalni utjecaj na performanse.

5.4.2 MAX_DISPATCH_LATENCY

Postavite maksimalno vrijeme koliko događaji mogu ostati u međuspremnicima prije nego što se zapišu na ciljeve:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Niže vrijednosti pružaju više podataka u stvarnom vremenu po cijenu povećanog broja I/O operacija.

5.4.3 NAČIN_RADA_PARTICIJE_MEMORIJE

Optimizirajte particioniranje memorije za konfiguraciju vašeg hardvera:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Opcije uključuju NONE za jednu particiju, PER_NODE za NUMA sustave i PER_CPU za maksimalnu konkurentnost na sustavima s više procesora.

5.5 Pokretanje, zaustavljanje i mijenjanje sesija

Upravljajte stanjem i konfiguracijom sesije putem naredbi ALTER EVENT SESSION.

5.5.1 PROMJENA SESIJE DOGAĐAJA za Pokretanje/Zaustavljanje

Započnite sesiju nakon kreiranja:

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

Zaustavite trčanje:

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

5.5.2 Izmjena postojećih sesija

Izmijenite konfiguraciju sesije dok je zaustavljena. Dodajte događaje:

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

Ukloni događaje:

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

5.5.3 Ukidanje sesija događaja

Uklonite sesiju u potpunosti pomoću naredbe DROP EVENT SESSION:

DROP EVENT SESSION [SampleSession] ON SERVER;

Sesija se mora zaustaviti prije ispuštanja.

6. Detaljan rad s ciljevima događaja

6.1 event_file Ciljna konfiguracija

Cilj event_file omogućuje trajnu pohranu podataka o događajima s fleksibilnim opcijama konfiguracije.

6.1.1 Putanja datoteke i konvencije imenovanja

Navedite punu putanju i naziv datoteke za datoteke događaja:

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

Koristite .xel ekstenziju za proširene datoteke zapisnika događaja. Osigurajte SQL Server Servisni račun ima prava pisanja u navedeni direktorij.

6.1.2 Upravljanje kretanjem i veličinom datoteka

Konfigurirajte automatsko prebacivanje datoteka za upravljanje prostorom na disku:

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

Kada datoteka dosegne 50 MB, SQL Server Prošireni događaji stvaraju novu datoteku s povećanim sufiksom. Nakon što se dosegne 10 datoteka, najstarija datoteka se prepisuje.

6.1.3 Čitanje podataka datoteke događaja

Upitajte podatke datoteke događaja pomoću funkcije 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
);

Uzorak zamjenskog znaka čita sve datoteke povezane sa sesijom.

6.2 Korištenje cilja ring_buffera

Cilj ring_buffer pohranjuje događaje u memoriju radi brzog pristupa nedavnim aktivnostima.

6.2.1 Pohranjivanje događaja u memoriji

Konfigurirajte ring_buffer za pohranu temeljenu na memoriji:

ADD TARGET package0.ring_buffer

Događaji ostaju dostupni samo dok je sesija aktivna i SQL Server se izvodi. Podaci se gube kada se sesija zaustavi ili se poslužitelj ponovno pokrene.

6.2.2 Veličina i konfiguracija međuspremnika

Kontrolna alokacija memorije za prstenasti međuspremnik:

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

Navedite memoriju u KB. Kada se međuspremnik napuni, stariji događaji se odbacuju korištenjem FIFO pristupa.

6.2.3 Upiti o podacima međuspremnika prstena

Pristup podacima međuspremnika prstena putem DMV-ova:

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 sadrži informacije o događajima u XML formatu.

6.3 Brojač_događaja Cilj

Cilj event_counter omogućuje jednostavno brojanje bez detaljnog pohranjivanja podataka:

ADD TARGET package0.event_counter

Ovaj cilj prati učestalost događaja uz minimalne troškove, što je korisno za praćenje velikog volumena gdje su važni samo brojevi.

6.4 Cilj histograma

Cilj histograma grupira događaje prema vrijednostima polja:

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

Ova konfiguracija stvara histogram koji prikazuje distribuciju događaja u bazama podataka.

6.5 Cilj podudaranja parova

Cilj pair_matching povezuje povezane događaje poput akvizicija brava s izdanjima:

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

To omogućuje analizu uparenih operacija i njihovog trajanja.

7. Pregledavanje i analiziranje podataka o proširenim događajima

7.1 Korištenje SSMS-a za pregled podataka uživo

SQL Server Management Studio pruža grafičko sučelje za pregled podataka proširenih događaja u stvarnom vremenu:

  1. U Exploreru objekata proširite Upravljanje -> Prošireni događaji -> sjednice.
  2. Desnom tipkom miša kliknite aktivnu sesiju.
  3. odabrati Gledajte podatke uživo za otvaranje preglednika podataka uživo.
    Gledajte podatke uživo sesije proširenih događaja u SQL Server Studio za upravljanje.
  4. Događaji se prikazuju u mreži kako se događaju.
  5. Kliknite na pojedinačne događaje za prikaz detaljnih vrijednosti polja u oknu s detaljima.
    Pratite podatke događaja uživo, uključujući detalje događaja.
  6. Pomoću filtara alatne trake usredotočite se na određene vrste događaja ili vrijednosti polja.

7.2 Upiti o podacima datoteke događaja pomoću T-SQL-a

T-SQL upiti pružaju fleksibilnu analizu snimljenih podataka o događajima.

7.2.1 Funkcija sys.fn_xe_file_target_read_file

Pročitajte podatke datoteke događaja pomoću ove sistemske funkcije:

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

Funkcija vraća jedan redak po događaju s detaljima u XML formatu.

7.2.2 Raščlanjivanje XML podataka o događajima

Iz XML podataka o događajima izvucite određene vrijednosti:

SELECT
    event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
    event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
    event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
    SELECT CAST(event_data AS XML) AS event_data
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
) AS EventData;

XQuery izrazi izdvajaju pojedinačne vrijednosti polja iz XML strukture.

7.2.3 Pretvaranje podataka događaja u tablice

Izradite strukturirane skupove rezultata iz podataka o događajima:

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 Upiti o podacima međuspremnika prstena

Izdvoji podatke iz ciljeva 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 Prikazi sustava za proširene događaje

SQL Server pruža nekoliko DMV-ova i kataloških prikaza za upravljanje i praćenje sesija proširenih događaja.

7.4.1 sys.server_event_sessions

Pogledajte definicije sesija pohranjene na poslužitelju:

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

Ovaj prikaz kataloga prikazuje detalje konfiguracije za sve definirane sesije.

7.4.2 sys.dm_xe_sessions

Pogledajte trenutno aktivne sesije:

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

Ovaj DMV pruža informacije o aktivnim sesijama proširenih događaja tijekom izvođenja.

7.4.3 sys.dm_xe_session_targets

Pogledajte ciljeve povezane s aktivnim sesijama:

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 Ostali korisni DMV-ovi

Dodatni prikazi pružaju sveobuhvatne informacije o sesiji:

  • sys.dm_xe_session_events: Navodi događaje u aktivnim sesijama
  • sys.dm_xe_session_event_actions: Prikazuje radnje konfigurirane za događaje sesije
  • sys.dm_xe_objects: Katalogizira sve dostupne događaje, akcije i ciljeve
  • sys.dm_xe_object_columns: Polja s detaljima dostupna za svaku vrstu događaja
  • sys.dm_xe_packages: Navodi sve pakete proširenih događaja

8. Praktični slučajevi i primjeri upotrebe

8.1 Praćenje izvršavanja SQL naredbi

Praćenje izvršavanja SQL naredbi pruža uvid u obrasce upita i karakteristike performansi.

8.1.1 Praćenje događaja sql_statement_completed

Kreirajte sesiju za praćenje dovršenih SQL naredbi:

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 Filtriranje prema bazi podataka ili aplikaciji

Usredotočite se na specifične baze podataka ili aplikacije pomoću predikata:

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 Prikupljanje informacija o zastoju

Analiza zastoja zahtijeva prikupljanje detaljnih informacija o konfliktnim transakcijama.

8.2.1 Događaj xml_deadlock_report

Stvorite sesiju za snimanje kompletnih grafova zastoja:

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 Analiza grafova zastoja

Izdvajanje i analiza informacija o zastoju:

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

Graf zastoja sadrži detalje o procesima, resursima i odabiru žrtve.

8.3 Problemi s performansama upita za praćenje

Identificirajte upite s lošim performansama pomoću metrika trajanja i potrošnje resursa.

8.3.1 Detekcija dugotrajnih upita

Zabilježi upite koji prelaze određene pragove trajanja:

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 plana izvršenja

Planovi upita za hvatanje za analizu performansi:

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 Praćenje događaja prijave i sigurnosti

Pratite aktivnosti autentifikacije i autorizacije za sigurnosnu reviziju.

8.4.1 Praćenje uspješne i neuspješne prijave

Pratite uspješne i neuspješne pokušaje prijave:

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 Promjene dopuštenja

Praćenje izmjena sigurnosnih dozvola:

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 Nadzor na razini baze podataka

Pratite operacije specifične za bazu podataka i promjene stanja.

8.5.1 Događaji sigurnosne kopije i vraćanja

Praćenje operacija sigurnosne kopije i vraćanja:

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 Promjene stanja baze podataka

Praćenje prijelaza stanja baze podataka:

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

8.6 Otkrivanje korupcije i problema s integritetom baze podataka

SQL Server Prošireni događaji pružaju mogućnosti ranog upozorenja za otkrivanje potencijalne korupcije u bazi podataka, omogućujući proaktivnu intervenciju prije nego što problemi eskaliraju.

8.6.1 Ključni događaji za otkrivanje korupcije

Nekoliko događaja signalizira potencijalnu korupciju ili probleme s ulazno/izlaznim operacijama.

8.6.1.1 error_reported Događaj za kritične pogreške

Događaj error_reported obuhvaća sve SQL Server pogreške, uključujući brojeve pogrešaka povezanih s korupcijom:

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

Pogreška 823 označava I/O pogreške, 824 signalizira pogreške logičke konzistentnosti, a 825 izvještava o uspješnim ponovnim pokušajima čitanja koji mogu ukazivati ​​na probleme s hardverom.

8.6.1.2 Događaj database_suspect_data_page

Ovaj događaj se aktivira kada SQL Server naiđe na sumnjivu stranicu:

ADD EVENT sqlserver.database_suspect_data_page

Sumnjive stranice ukazuju na potencijalnu korupciju i zapisuju se u tablicu msdb.dbo.suspect_pages.

8.6.1.3 errorlog_written događaj

Snimite unose zapisane u SQL Server zapisnik grešaka:

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

8.6.2 Izrada sesije praćenja korupcije

Uspostaviti sveobuhvatnu sjednicu za otkrivanje i praćenje korupcije.

8.6.2.1 Filtriranje brojeva pogrešaka zbog oštećenja (823, 824, 825)

Osmislite ciljanu sesiju usmjerenu na pokazatelje korupcije:

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 Postavljanje odgovarajućih razina ozbiljnosti

Uključite pogreške visoke ozbiljnosti koje mogu ukazivati ​​na korupciju:

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

Ozbiljnost 20 i više ukazuje na probleme na razini sustava koji su često povezani s korupcijom.

8.6.2.3 Konfiguriranje cilja datoteke događaja za upozorenja

Pohrani događaje korupcije za analizu i upozoravanje:

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 Analiza podataka o događajima korupcije

Izdvojiti i interpretirati događaje povezane s korupcijom iz prikupljenih podataka.

8.6.3.1 Identificiranje sumnjivih stranica

Upit za događaje 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 Izdvajanje detalja i konteksta pogreške

Analizirajte događaje prijavljenih pogrešaka za obrasce korupcije:

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 Integracija s DBCC CHECKDB-om

Koristite podatke proširenih događaja kao vodič DBCC CHECKDB izvršenje.

8.6.4.1 Pokretanje DBCC CHECKDB na temelju događaja

Kada se otkriju događaji korupcije, izvršite DBCC CHECKDB za sveobuhvatnu validaciju:

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

Prošireni događaji pružaju rano upozorenje, dok DBCC CHECKDB provodi temeljitu validaciju.

8.6.4.2 Automatizirani tijekovi rada za odgovor na korupciju

Implementirajte automatizirane odgovore praćenjem datoteke događaja:

  1. konfigurirati SQL Server Posao agenta za periodično ispitivanje datoteke događaja praćenja korupcije.
  2. Kada se pronađu događaji korupcije, izvršite DBCC CHECKDB na pogođenoj bazi podataka.
  3. Pošaljite upozorenja e-poštom administratorima baza podataka s detaljima događaja i rezultatima DBCC CHECKDB-a.
  4. Zabilježite nalaze u centraliziranu tablicu za praćenje radi analize trendova.
8.6.4.3 Uravnoteženje proaktivnog praćenja s performansama

Prošireni događaji nude otkrivanje korupcije s malim opterećenjem u usporedbi s čestim izvršavanjem DBCC CHECKDB:

  • Neprekidno pokretanje proširenih događaja za otkrivanje korupcije u stvarnom vremenu
  • Izvrši DBCC CHECKDB samo kada se pojave indikatori korupcije
  • Zakažite redovito DBCC CHECKDB tijekom razdoblja održavanja
  • Koristite proširene događaje za prepoznavanje baza podataka koje zahtijevaju hitnu pozornost

Ovaj pristup omogućuje proaktivno praćenje bez značajne potrošnje resursa stalnih provjera integriteta.

8.6.4.4 Popravak oštećene baze podataka

Ako se u bazi podataka otkriju oštećenja, možete koristiti DBCC CHECKDB za ispravljanje manjih oštećenja. Ako ne uspije, možete pokušati s alatom treće strane. Alat za oporavak SQL baze podataka, što općenito nudi veću stopu oporavka na teško oštećenim bazama podataka.

9. Prošireni događaji na razini poslužitelja u odnosu na proširene događaje na razini baze podataka

9.1 Sesije događaja na razini poslužitelja

Sesije na razini poslužitelja prate aktivnost u cijelom SQL Server instanca. Ove sesije se stvaraju klauzulom ON SERVER i ostaju u glavnoj bazi podataka.

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

Sesije na razini poslužitelja bilježe događaje iz svih baza podataka i prikladne su za praćenje na razini instance.

9.2 Sesije događaja u opsegu baze podataka (Azure SQL baza podataka)

Sesije s opsegom baze podataka ograničene su na jednu bazu podataka i prvenstveno se koriste u Azure SQL bazi podataka gdje je pristup na razini poslužitelja ograničen:

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

U Azure SQL bazi podataka, datoteke događaja pohranjuju se u Azure Blob Storage, a ne u lokalne datotečne sustave.

9.3 Razlike i slučajevi upotrebe

Sesije na razini poslužitelja pružaju sveobuhvatno praćenje svih baza podataka, ali zahtijevaju povišena dopuštenja. Sesije na razini baze podataka nude izolaciju i prikladne su za praćenje određenih aplikacija ili korisnika.

Koristite sesije s opsegom poslužitelja za centralizirano praćenje, rješavanje problema s performansama u bazama podataka i sigurnosnu reviziju. Koristite sesije s opsegom baze podataka u Azure SQL bazi podataka, okruženjima s više zakupaca ili prilikom delegiranja odgovornosti praćenja timovima aplikacija.

10. Prošireni događaji u Azure SQL bazi podataka

10.1 Razmatranja specifična za Azure

Azure SQL baza podataka implementira proširene događaje s nekim razlikama u odnosu na lokalnu implementaciju. SQL ServerSesije su prema zadanim postavkama ograničene na bazu podataka, a pohrana datoteka događaja koristi Azure Blob Storage umjesto lokalnih datotečnih sustava.

Za autentifikaciju na Azure Blob Storage potreban je SAS token konfiguriran unutar cilja datoteke događaja. Nizovi za povezivanje upućuju na račun za pohranu i spremnik u kojem su pohranjene datoteke događaja.

10.2 Dostupni ciljevi u Azureu

Azure SQL baza podataka podržava ove ciljeve proširenih događaja:

  • event_file: Zapisuje u Azure Blob Storage
  • ring_buffer: Pohrana temeljena na memoriji s istim ponašanjem kao i lokalna pohrana
  • event_counter: Broji pojavljivanja događaja

Cilj event_file zahtijeva konfiguraciju s vjerodajnicama za Azure Blob Storage:

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

10.3 Stvaranje sesija s opsegom baze podataka

Stvorite sesiju u Azure SQL bazi podataka:

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;

Sesije ograničene na bazu podataka u Azureu ponašaju se slično kao i sesije ograničene na poslužitelj u lokalnim sustavima, ali s opsegom ograničenim na trenutnu bazu podataka.

11. Najbolje prakse i optimizacija performansi

11.1 Minimiziranje utjecaja na performanse

Prošireni događaji osmišljeni su za minimalno opterećenje, ali nepravilna konfiguracija može utjecati na performanse. Slijedite ove smjernice:

  • Koristite specifične predikata za filtriranje događaja umjesto da sve bilježite
  • Izbjegavajte prikupljanje nepotrebnih radnji koje povećavaju opterećenje obrade
  • Odaberite odgovarajuće ciljeve na temelju potreba za zadržavanjem podataka
  • Postavite razumne veličine međuspremnika i latencije otpreme
  • Praćenje potrošnje resursa sesije pomoću DMV-ova

11.2 Odabir pravih događaja i filtera

Odaberite događaje koji izravno odgovaraju na vaše ciljeve praćenja. Izbjegavajte događaje visoke učestalosti osim ako nije potrebno i uvijek primijenite predikate kako biste smanjili količinu podataka.

Na primjer, umjesto hvatanja svih događaja sql_statement_completed, filtrirajte prema određenim bazama podataka ili pragovima trajanja:

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

11.3 Smjernice za odabir cilja

Odaberite ciljeve na temelju svojih analitičkih zahtjeva:

  • Koristite event_file za detaljnu povijesnu analizu i dugoročno zadržavanje
  • Koristite ring_buffer za praćenje u stvarnom vremenu s minimalnim utjecajem na I/O
  • Koristite event_counter kada je važna samo učestalost
  • Koristite histogram za analizu distribucije
  • Koristite pair_matching za analizu koreliranih događaja

11.4 Preporuke za konfiguraciju sesije

Konfigurirajte sesije s odgovarajućim ograničenjima resursa:

  • Postavite MAX_MEMORY na temelju očekivanog volumena događaja i resursa poslužitelja
  • Koristite ALLOW_SINGLE_EVENT_LOSS za minimalne opterećenje u većini scenarija.
  • Postavite MAX_DISPATCH_LATENCY kako biste uravnotežili potrebe u stvarnom vremenu s performansama
  • Koristite particioniranje memorije PER_CPU na višeprocesorskim sustavima
  • Izbjegavajte STARTUP_STATE=ON osim ako nije potrebno kontinuirano praćenje

11.5 Upravljanje veličinom i zadržavanjem datoteke događaja

Konfigurirajte prebacivanje datoteka kako biste spriječili neograničeno korištenje diska:

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

Ova konfiguracija održava približno 1 GB podataka o događajima (10 datoteka × 100 MB). Prilagodite na temelju svojih zahtjeva za zadržavanje i dostupne pohrane.

12. Rješavanje problema s proširenim događajima

12.1 Uobičajeni problemi i rješenja

Uobičajeni problemi s proširenim događajima uključuju sesije koje ne bilježe podatke, smanjenje performansi, probleme s ciljanim datotekama i neočekivano ponašanje sesije.

12.2 Sesija ne prikuplja podatke

Ako sesija ne bilježi očekivane događaje:

  1. Provjerite je li sesija pokrenuta pomoću sys.dm_xe_sessions.
  2. Provjerite predikate kako biste bili sigurni da ne filtriraju sve događaje.
  3. Potvrdite da se događaji aktiviraju privremenim uklanjanjem filtera.
  4. Pregledajte dopuštenja kako biste bili sigurni da imate pristup za pregled podataka sesije.
  5. Provjerite je li konfiguracija cilja ispravna i dostupna za pisanje.
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Pad performansi

Ako prošireni događaji uzrokuju probleme s performansama:

  1. Dodajte predikate kako biste smanjili broj događaja.
  2. Uklonite nepotrebne radnje koje prikupljaju dodatne podatke.
  3. Povećajte MAX_DISPATCH_LATENCY za smanjenje učestalosti pisanja.
  4. Promijenite EVENT_RETENTION_MODE na ALLOW_SINGLE_EVENT_LOSS.
  5. Razmislite o korištenju ring_buffer umjesto event_file za događaje visoke učestalosti.

12.4 Problemi s ciljem datoteke

Problemi s ciljanim datotekama često se odnose na dozvole ili prostor na disku:

  1. Provjerite SQL Server servisni račun ima prava pisanja u ciljni direktorij.
  2. Osigurajte dovoljno prostora na disku.
  3. Provjerite postoji li navedena putanja i je li dostupna.
  4. Pregledajte konfiguraciju prebacivanja datoteka ako se datoteke ne prebacuju kako se očekuje.

12.5 Otklanjanje pogrešaka pomoću sistemskih prikaza

Koristite DMV-ove za dijagnosticiranje problema s proširenim događajima:

-- 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. Napredne teme

13.1 Izrada prilagođenih paketa događaja

Napredni korisnici mogu kreirati prilagođene pakete događaja kako bi proširili SQL Server Proširena funkcionalnost događaja. To zahtijeva razvoj u C++ i integraciju s SQL Server okvir za proširivost.

Prilagođeni paketi omogućuju praćenje događaja specifičnih za aplikaciju ili integraciju sustava za praćenje trećih strana s infrastrukturom proširenih događaja.

13.2 Predlošci sesija događaja

SSMS nudi ugrađene predloške za uobičajene scenarije praćenja. Pristupite predlošcima prilikom stvaranja novih sesija putem čarobnjaka:

  1. U dijalogu Nova sesija kliknite na predložak padajućeg.
  2. Odaberite između dostupnih predložaka kao što su Praćenje detalja upita ili Zdravlje sustava.
  3. Prilagodite predložak kako bi odgovarao vašim specifičnim zahtjevima.

13.3 Integracija s rješenjima za nadzor

Podaci proširenih događaja mogu poslužiti kao izvor informacija za rješenja za praćenje poduzeća:

  • Izvoz podataka o događajima u centralizirane sustave za evidentiranje
  • Analiziranje datoteka događaja i učitavanje podataka u nadzorne baze podataka
  • Izradite prilagođene nadzorne ploče pomoću BI alata
  • Pokretanje upozorenja na temelju određenih obrazaca događaja
  • Korelacijska SQL Server događaji s metrikama aplikacija i infrastrukture

13.4 Automatizacija i raspoređivanje

Automatizirajte upravljanje proširenim događajima pomoću SQL Server Agent:

  • Stvaranje poslova za pokretanje/zaustavljanje sesija tijekom određenih vremenskih prozora
  • Analiza i izvještavanje o rasporedu datoteka događaja
  • Implementirajte pravila zadržavanja podataka arhiviranjem ili brisanjem starih datoteka događaja
  • Automatizirajte odgovor na otkrivene uvjete kao što su problemi s performansama ili sigurnosni događaji

14. Migracija iz SQL Server Profiler

14.1 SQL Server Mapiranje događaja profilera na proširene događaje

Microsoft pruža mapiranje između SQL Server Profiler događaji i prošireni događaji. Uobičajena mapiranja uključuju:

  • SQL:BatchCompleted -> sql_batch_completed
  • SQL:Pokretanje serije -> sql_pokretanje_serije
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starting
  • Grafikon zastoja -> xml_deadlock_report
  • Prijava za reviziju -> prijava
  • Odjava iz revizije -> odjava

14.2 Pretvaranje definicija tragova

Pretvori postojeće SQL Server Profiler prati sesije proširenih događaja identificiranjem ekvivalentnih događaja i konfiguriranjem odgovarajućih predikata. SSMS pruža pomoć za uobičajene konverzije.

Pregledajte filtere praćenja i pretvorite ih u predikate proširenih događaja. Radnje u proširenim događajima zamjenjuju stupce praćenja iz SQL Server Profiler.

14.3 Usporedba performansi

Prošireni događaji pružaju znatno bolje performanse od SQL Server Profiler. Studije mjerila pokazuju da prošireni događaji troše manje CPU ciklusa i imaju manji utjecaj na propusnost transakcija.

Prošireni događaji koriste asinhronu obradu i optimizirano upravljanje memorijom, dok SQL Server Profiler se oslanja na sinkrono snimanje događaja koje se blokira dok se ne završi obrada traga.

15. Zaključak

15.1 Sažetak ključnih pojmova

SQL Server Prošireni događaji pružaju snažan i lagan okvir za praćenje i rješavanje problema SQL ServerArhitektura se sastoji od događaja, akcija, predikata, ciljeva i sesija koji zajedno rade na hvatanju relevantne aktivnosti poslužitelja.

Sesije se mogu kreirati pomoću SSMS-a ili T-SQL-a, što nudi fleksibilnost za ad-hoc rješavanje problema i automatizirano praćenje. Višestruki tipovi ciljeva podržavaju različite pristupe analizi, od praćenja u stvarnom vremenu s ring_buffer do povijesne analize s event_file.

Prošireni događaji pružaju vrhunske performanse u usporedbi s SQL Server Profiler uz pružanje sveobuhvatnijih mogućnosti praćenja. Sustav omogućuje administratorima baza podataka i programerima dijagnosticiranje problema, optimizaciju performansi, poboljšanje sigurnosti i održavanje usklađenosti.

15.2 Sljedeći koraci i dodatni resursi

Za nastavak razvoja vašeg SQL Server Stručnost XEventsa:

  • Implementirajte proširene događaje u testnim okruženjima kako biste stekli praktično iskustvo
  • Pregledajte Microsoftovu dokumentaciju za potpune kataloge događaja i detaljne sintaktičke reference
  • Pridružite se SQL Server forumi zajednice za učenje iz iskustava drugih
  • Istražite napredne scenarije poput prilagođenih paketa i integracije s platformama za nadzor
  • Razviti biblioteku predložaka sesija za uobičajene scenarije praćenja

16 Odjeljak s često postavljanim pitanjima

P: Što su SQL Server Prošireni događaji?

A: SQL Server Prošireni događaji su lagani sustav za praćenje performansi integriran u SQL Server Mehanizam baze podataka koji prikuplja detaljne informacije o radu poslužitelja uz minimalne troškove.

P: Po čemu se prošireni događaji razlikuju od SQL Server Profiler?

A: Prošireni događaji pružaju bolje performanse, niže opterećenje i fleksibilniju konfiguraciju od SQL Server Profiler. SQL Server Profiler je zastario, a Microsoft preporučuje korištenje proširenih događaja za sve zadatke praćenja.

P: Mogu li prošireni događaji utjecati SQL Server izvođenje?

A: Kada su pravilno konfigurirani s odgovarajućim predikatima i ograničenjima resursa, prošireni događaji imaju minimalan utjecaj na performanse. Loša konfiguracija bez filtriranja može utjecati na performanse.

P: Koje su dozvole potrebne za stvaranje sesija proširenih događaja?

A: Potrebno vam je dopuštenje ALTER ANY EVENT SESSION za sesije ograničene na poslužitelj ili dopuštenje CONTROL na bazi podataka za sesije ograničene na bazu podataka.

P: Kako mogu pregledati podatke proširenih događaja?

O: Koristite SQL Server Preglednik podataka uživo u Management Studiu, upit datotekama događaja pomoću sys.fn_xe_file_target_read_file ili upit podataka međuspremnika prstena putem DMV-ova.

P: Mogu li prošireni događaji otkriti oštećenje baze podataka?

O: Da, prošireni događaji mogu uhvatiti pogreške povezane s korupcijom (823, 824, 825) i događaje sumnjivih stranica, pružajući rano upozorenje na potencijalne probleme s korupcijom.

P: Koja je razlika između događaja, radnji i predikata?

A: Događaji su pojave koje želite pratiti. Radnje dodaju dodatne informacije zabilježenim događajima. Predikati filtriraju događaje na temelju uvjeta kako bi se smanjila količina podataka.

P: Kako mogu pratiti upite iz određenih aplikacija ili baza podataka?

A: Koristite predikate u konfiguraciji događaja za filtriranje prema nazivu_database_name, nazivu_client_app_name ili drugim relevantnim poljima.

P: Koje ciljeve trebam koristiti za proširene događaje?

A: Koristite event_file za trajnu pohranu i povijesnu analizu, ring_buffer za praćenje u stvarnom vremenu s niskim opterećenjem, event_counter za jednostavno praćenje frekvencije i histogram za analizu distribucije.

P: Jesu li prošireni događaji dostupni u Azure SQL bazi podataka?

O: Da, Azure SQL baza podataka podržava proširene događaje s opsegom baze podataka s datotekama događaja pohranjenima u Azure Blob Storageu.

P: Kako mogu riješiti problem sa sesijom proširenih događaja koja ne bilježi podatke?

A: Provjerite je li sesija pokrenuta, provjerite filtriraju li predikati sve događaje, potvrdite konfiguraciju cilja i pregledajte dozvole pomoću sistemskih DMV-ova.

P: Mogu li automatizirati upravljanje proširenim događajima?

O: Da, koristiti SQL Server Agenti za pokretanje/zaustavljanje sesija, analizu datoteka događaja, implementaciju politika zadržavanja i reagiranje na otkrivene uvjete.

Reference


O Autor:

Yuan Sheng je viši administrator baze podataka (DBA) s preko 10 godina iskustva u SQL Server okruženja i upravljanje bazama podataka poduzeća. Uspješno je riješio stotine scenarija oporavka baza podataka u financijskim uslugama, zdravstvu i proizvodnim organizacijama.

Yuan se specijalizirao za SQL Server oporavak baze podataka, rješenja visoke dostupnostii optimizaciju performansi. Njegovo opsežno praktično iskustvo uključuje upravljanje bazama podataka od više terabajta, implementaciju Grupe dostupnosti Always Oni razvoj automatiziranih strategija sigurnosnog kopiranja i oporavka za ključne poslovne sustave.

Svojim tehničkim znanjem i praktičnim pristupom, Yuan se usredotočuje na stvaranje sveobuhvatnih vodiča koji pomažu administratorima baza podataka i IT stručnjacima u rješavanju složenih SQL Server učinkovito rješava izazove. Ostaje u toku s najnovijim SQL Server izdanja i Microsoftove razvojne tehnologije baza podataka, redovito testirajući scenarije oporavka kako bi osigurao da njegove preporuke odražavaju najbolje prakse iz stvarnog svijeta.

Imate pitanja o SQL Server oporavak ili trebate dodatne upute za rješavanje problema s bazom podataka? Yuan pozdravlja povratne informacije i sugestije za poboljšanje ovih tehničkih resursa.

Podijeli sada: