Podijeli sada:
Sadržaj sakriti

1. Uvod

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

SQL Server Extended Events je lagani sistem za praćenje performansi koji omogućava administratorima i programerima da prikupljaju i analiziraju detaljne podatke o aktivnosti servera. Ovaj sistem je integrisan 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 baze podataka i rješavanje problema:

  • Minimalan 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 sistema 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 realnom vremenu i historijskih podataka

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

dok SQL Server Profiler Iako je do sada bio tradicionalni alat za praćenje, MS SQL Extended Events pruža efikasniju alternativu. Extended Events troši manje sistemskih resursa i nudi bolju skalabilnost za produkcijska okruženja.

SQL Server Profiler je sada zastario i 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 za proširene događaje

Mehanizam za proširene događaje sastoji se od nekoliko osnovnih komponenti koje rade zajedno 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 obavještenje i usmjerava ga ka aktivnim sesijama koje su pretplaćene na taj specifični tip događaja.
  • buffer: Baferi privremeno pohranjuju podatke o događajima u memoriju prije pisanja na ciljeve. Ovaj mehanizam baferovanja poboljšava performanse smanjenjem I/O operacija. Veličina bafera i postavke upravljanja mogu se konfigurirati kako bi se uravnotežila upotreba memorije sa zahtjevima za prikupljanje podataka.
  • Sesija: Sesija definira opseg praćenja događaja. Ona specificira koje događaje treba uhvatiti, koje radnje treba izvršiti, koje predikate primijeniti i gdje pohraniti rezultate. Sesije se mogu kreirati, mijenjati, pokretati i zaustavljati nezavisno.
  • 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, prstenasti međuspremnici ili brojači. Ciljevi obrađuju i čuvaju informacije o događajima za kasniju analizu.

2.2 Paketi za događaje

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

  • Paket sqlserver pruža događaje specifične za bazu podataka, kao što su upiti i transakcije.
  • sqlos paket sadrži događaje operativnog sistema.
  • Paket0 nudi funkcionalnost opšte namjene koja se koristi u svim paketima.

2.3 Vrste događaja i polja

Događaji predstavljaju pojave unutar SQL Server koje želite pratiti. Svaki tip 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 sinhroni ili asinhroni. Sinhroni događaji se aktiviraju tokom same operacije, dok se asinhroni događaji aktiviraju nakon završetka. Razumijevanje karakteristika događaja pomaže vam da odaberete odgovarajuće događaje za vaše potrebe praćenja.

2.4 Radnje

Akcije dodaju dodatne informacije snimljenim događajima. Kada se događaj aktivira, izvršavaju se povezane akcije kako bi se prikupio dodatni kontekst kao što su SQL tekst, ID sesije ili informacije o steku poziva.

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

2.5 Ciljevi

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

  • event_file za pohranu na disku, pružajući trajnu pohranu za detaljnu analizu
  • ring_buffer za zadržavanje podataka na bazi memorije, 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 (Filteri)

Predikati filtriraju događaje na osnovu određenih uslova, 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.

Efikasna upotreba predikata minimizira utjecaj na performanse tako što obuhvata samo relevantne događaje. Složeni predikat kombinuje više uslova koristeći logičke operatore za kreiranje preciznih kriterija filtriranja.

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

3.1 Stanja sesije: KREIRANJE, 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 sve dok se eksplicitno ne aktivira.
  • Naredba ALTER EVENT SESSION mijenja konfiguraciju sesije ili mijenja njeno stanje između zaustavljenog i pokrenutog.
  • Naredba DROP EVENT SESSION u potpunosti uklanja definiciju sesije sa servera.

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 alokaciju memorije, zadržavanje događaja i latenciju otpreme.

Karakteristike sesije uključuju da li one traju nakon ponovnog pokretanja servera, maksimalnu alokaciju memorije i kako se nose s pritiskom memorije. Ove postavke značajno utič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 akcije iz drugog paketa, pružajući fleksibilnost u strategijama prikupljanja podataka.

Paketni odnosi vam omogućavaju kombinovanje događaja iz više izvora unutar jedne sesije. Ova mogućnost omogućava sveobuhvatne scenarije praćenja koji obuhvataju različite SQL Server podsistemi.

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

4.1 Preduslovi i podešavanje

Prije kreiranja SQL Server Za proširene sesije događaja, provjerite imate li odgovarajuće dozvole. Potrebna vam je dozvola ALTER ANY EVENT SESSION za sesije na nivou servera ili dozvola CONTROL za bazu podataka za sesije na nivou baze podataka.

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

4.2 Pristup proširenim događajima u Object Exploreru

Da biste pristupili interfejsu proširenih događaja u SSMS-u, slijedite ove korake:

  1. otvoreno SQL Server Management Studio i povežite se sa svojim SQL Server primer.
  2. U Exploreru objekata proširite upravljanje -> Extended Events.
  3. Čvor Prošireni događaji sadrži Sessions i paketi mape za upravljanje konfiguracijama praćenja.

Pristupite interfejsu proširenih događaja u SQL Server ManagementStudio.

4.3 Kreiranje nove sesije

Da biste kreirali novu sesiju:

    1. Desnim tasterom miša kliknite na Sessions folder under Extended Events.
    2. izabrati Nova sesija da biste otvorili dijalog za konfiguraciju. Sljedeći sadržaj će koristiti ovu metodu za kreiranje nove sesije.

Kreiraj novu sesiju proširenih događaja u SQL Server ManagementStudio.

Napomena: The Čarobnjak za novu sesiju također je dostupno za iskustvo s više vodiča.

4.3.1 Opća konfiguracija stranice

Na Opšti stranicu, konfigurirajte osnovna svojstva sesije:

  1. Unesite naziv sesije u Naziv sesije polje. Koristite opisna imena koja ukazuju na svrhu praćenja.
  2. Opciono izaberite Pokreni sesiju događaja pri pokretanju servera da biste omogućili automatsku aktivaciju sesije.
  3. Zadani predložak sesije je BlankMožete koristiti i druge predloške ako koristite unaprijed definiranu konfiguraciju.

Opšta stranica sesije Prošireni događaji u SQL Server ManagementStudio.

4.3.2 Postavke stranice Događaji

The Događanja Stranica vam omogućava da odaberete koje događaje želite pratiti:

  1. Izaberite Događanja stranica s lijeve strane Odaberite stranicu panel.
  2. U Biblioteka događaja, pregledajte dostupne događaje ili koristite funkciju pretraživanja.
  3. Filtrirajte događaje upisivanjem ključnih riječi kao što je „sql_statement_completed“ da biste pronašli relevantne događaje.
  4. Odaberite željeni događaj, kao što je sql_statement_completed.
  5. Kliknite na dugme sa strelicom udesno da biste premjestili događaj na Odabrani događaji listu.

Stranica Događaji sesije Prošireni događaji u SQL Server ManagementStudio.

4.3.3 Konfiguracija pohrane podataka

The Data Storage Stranica definira gdje se pohranjuju podaci o događajima:

  1. Izaberite Data Storage stranica s lijeve strane Odaberite stranicu panel.
  2. U ciljevi područje, odaberite vrstu cilja iz padajućeg izbornika.

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

(1) Cilj datoteke_događaja

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

  1. izabrati datoteka_događaja iz padajućeg menija za vrstu cilja.
  2. Navedite putanju datoteke, kao što je C:\temp\VašaCilj_Sesije.xel.
  3. Konfigurišite opcije prebacivanja da biste upravljali prostorom na disku postavljanjem maksimalne veličine datoteke i broja datoteka.
  4. Cilj kontinuirano zapisuje događaje sve dok se sesija ne završi ili se ne dostignu ograničenja memorije.

Postavite cilj sesije na event_file u SSMS-u

(2) Cilj ring_buffera

Ciljna funkcija ring_buffer pohranjuje događaje u memoriju radi brzog pristupa bez potrebe za diskovnim ulazno/izlaznim operacijama:

  1. izabrati prstenasti_bafer kao ciljni tip.
  2. Konfigurišite maksimalnu alokaciju memorije za bafer.
  3. Imajte na umu da se stariji događaji odbacuju kada se bafer napuni, što ovo čini pogodnim za praćenje nedavnih aktivnosti.

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

(3) brojač_događaja Cilj

Ciljna funkcija event_counter jednostavno broji pojave događaja bez pohranjivanja detaljnih podataka. Ovo 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 ManagementStudio.

(4) Cilj histograma

Histogram ciljano grupira događaje prema određenoj vrijednosti polja, kreirajući statistiku distribucije. Ovo je korisno za identifikaciju uobičajenih obrazaca ili vrijednosti visoke frekvencije.

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

(5) Cilj podudaranja parova

Cilj pair_matching povezuje povezane događaje kao što su akvizicija i otključavanje brave. Ovo omogućava analizu uparenih operacija i njihovih vremenskih odnosa.

Postavite cilj sesije na pair_matching u SSMS-u

4.3.4 Napredne postavke

The Napredan Stranica pruža opcije konfiguracije na nivou sesije:

  1. Izaberite Napredan stranica s lijeve strane Odaberite stranicu panel.
  2. konfigurisati Način zadržavanja događaja da kontroliše kako se događaji obrađuju pod pritiskom memorije.
  3. Set Maksimalna latencija otpreme kako bi se uravnotežila obrada u realnom vremenu sa performansama sistema.
  4. konfigurisati Maksimalna veličina memorije i Maksimalna veličina događaja na osnovu vaših zahtjeva za praćenje.
  5. izabrati Način particije memorije za optimizaciju za okruženja s jednim ili više procesora.

Napredna stranica sesije u SQL Server ManagementStudio.

4.4 Konfigurisanje filtera događaja (predikata)

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

  1. Na Događanja stranicu, odaberite događaj koji želite filtrirati, kao što je „sql_statement_completed“.
  2. kliknite konfigurisati da biste otvorili dijalog za konfiguraciju događaja.
    Konfigurišite događaj sesije proširenih događaja u SQL Server ManagementStudio.
  3. Izaberite Filter (Predikat) tab.
  4. U polje U padajućem izborniku odaberite polje za filtriranje, kao što je trajanje.
  5. Izaberite an operator, kao što je „>“.
  6. Unesite filter vrijednost, kao što je 1000000 (1 sekunda).
  7. Dodajte još uslova ako je potrebno.

Konfigurišite filtere (predikate) za događaj.

4.5 Odabir polja za akcije i događaje

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

  1. Na Događanja Na stranici odaberite događaj za koji želite odabrati podatke, kao što je „sql_statement_completed“.
  2. kliknite konfigurisati da biste otvorili dijalog za konfiguraciju događaja.
  3. Izaberite Globalna polja (Akcije) tab.
  4. Odaberite radnje za dodavanje dodatnih informacija, kao što su naziv_baze_podataka ili naziv_klijentske_aplikacije.
    Konfigurišite radnje događaja.
  5. Pregledajte Polja događaja odjeljak da biste vidjeli koja se polja automatski snimaju.
  6. Obrišite sva nepotrebna polja kako biste smanjili količinu podataka.
    Konfigurišite polja događaja.

4.6 Pokretanje i upravljanje sesijama

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

  1. kliknite OK da kreirate sesiju.
  2. U Exploreru objekata proširite Sessions mapu da biste vidjeli svoju novu sesiju.
  3. Kliknite desnim tasterom miša na naziv sesije i izaberite Započni sesiju da počnete snimati događaje.
    Započnite sesiju proširenih događaja u SQL Server ManagementStudio.
  4. Za pregled podataka uživo, kliknite desnim tasterom miša na sesiju i izaberite Gledajte podatke uživo.
    Gledajte podatke uživo sesije proširenih događaja u SQL Server ManagementStudio.
  5. Zaustavite sesiju klikom desne tipke miša i odabirom Zaustavi sesiju.

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

5.1 Sintaksa KREIRANJA SESIJE DOGAĐAJA

Kreiranje proširenih sesija događaja pomoću T-SQL-a pruža preciznu kontrolu i omogućava skriptiranje za automatizirano postavljanje. Naredba CREATE EVENT SESSION prati specifičnu sintaksnu strukturu.

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

5.2 Kreiranje osnovne sesije događaja

Osnovna sesija prati specifične događaje i zapisuje rezultate u cilj. Evo kako konstruirati osnovne komponente.

5.2.1 Definisanje naziva i opcija sesije

Započnite kreiranjem sesije s opisnim nazivom:

CREATE EVENT SESSION [SampleSession] ON SERVER

Klauzula ON SERVER kreira sesiju ograničenu na server koja traje i nakon promjena u bazi podataka. Za Azure SQL bazu podataka koristite ON DATABASE za sesije ograničene na bazu podataka.

5.2.2 Dodavanje događaja pomoću opcije ADD EVENT

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

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

Ovo obuhvata sve završene SQL naredbe. Možete dodati više događaja uključivanjem dodatnih ADD EVENT klauzula.

5.2.3 Konfigurisanje akcija događaja

Akcije prikupljaju dodatni kontekst za svaki događaj. Dodajte akcije 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 dužim od 5 sekundi (5,000,000 mikrosekundi).

5.3 Dodavanje ciljeva događaja

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

5.3.1 Sintaksa DODAVANJA CILJA

Dodajte ciljeve koristeći klauzulu ADD TARGET nakon što su svi događaji definirani:

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 Konfigurisanje ciljnih parametara

Svaki tip cilja prihvata 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 kreira datoteke veličine do 50 MB, održavajući do 5 datoteka prilikom prebacivanja.

5.4 Opcije i postavke sesije

Klauzula WITH konfiguriše opcije na nivou sesije koje kontrolišu ponašanje i korišćenje resursa.

5.4.1 MAX_MEMORY i EVENT_RETENTION_MODE

Kontrola alokacije memorije i rukovanja 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 minimalno korištenje memorije, ALLOW_MULTIPLE_EVENT_LOSS za umjereno opterećenje i NO_EVENT_LOSS za potpuno zadržavanje podataka po cijenu potencijalnog utjecaja na performanse.

5.4.2 MAX_DISPATCH_LATENCY

Postavite maksimalno vrijeme koliko događaji mogu ostati u baferima prije nego što budu zapisani na ciljeve:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

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

5.4.3 REŽIM_PARTICIJE_MEMORIJE

Optimizirajte particioniranje memorije za vašu hardversku konfiguraciju:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Opcije uključuju NONE za jednu particiju, PER_NODE za NUMA sisteme i PER_CPU za maksimalnu konkurentnost na sistemima sa više procesora.

5.5 Pokretanje, zaustavljanje i mijenjanje sesija

Upravljajte stanjem i konfiguracijom sesije putem naredbi ALTER EVENT SESSION.

5.5.1 IZMJENA 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 DROP EVENT SESSION naredbe:

DROP EVENT SESSION [SampleSession] ON SERVER;

Sesija se mora prekinuti prije odustajanja.

6. Detaljan rad s ciljevima događaja

6.1 event_file Ciljna konfiguracija

Cilj event_file pruža 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 dnevnika događaja. Osigurajte SQL Server Servisni račun ima dozvole za pisanje u navedeni direktorij.

6.1.2 Upravljanje prebacivanjem datoteka i veličinom

Konfigurišite 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 dostigne 50 MB, SQL Server Prošireni događaji kreiraju novu datoteku sa inkrementiranim sufiksom. Nakon što se dostigne 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 džoker-a č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 zasnovano na memoriji

Konfigurišite ring_buffer za skladištenje zasnovano na memoriji:

ADD TARGET package0.ring_buffer

Događaji ostaju dostupni samo dok je sesija aktivna i SQL Server se izvršava. Podaci se gube kada se sesija prekine ili se server ponovo pokrene.

6.2.2 Veličina i konfiguracija bafera

Kontrolna alokacija memorije za prstenasti bafer:

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

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

6.2.3 Upiti o podacima prstenastog bafera

Pristup podacima prstenastog bafera 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ćava 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 obima događaja 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 kreira histogram koji prikazuje distribuciju događaja u bazama podataka.

6.5 Cilj podudaranja parova

Cilj pair_matching povezuje povezane događaje kao što su akvizicije brava sa 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'
)

Ovo omogućava analizu uparenih operacija i njihovog trajanja.

7. Pregled i analiza proširenih podataka o događajima

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

SQL Server Management Studio pruža grafički interfejs za pregled podataka proširenih događaja u realnom vremenu:

  1. U Exploreru objekata proširite upravljanje -> Extended Events -> Sessions.
  2. Kliknite desnim tasterom miša na vašu aktivnu sesiju.
  3. izabrati Gledajte podatke uživo da biste otvorili preglednik podataka uživo.
    Gledajte podatke uživo sesije proširenih događaja u SQL Server ManagementStudio.
  4. Događaji se pojavljuju u mreži onako kako se dešavaju.
  5. Kliknite na pojedinačne događaje da biste vidjeli detaljne vrijednosti polja u oknu s detaljima.
    Pratite podatke događaja uživo, uključujući detalje događaja.
  6. Koristite filtere alatne trake da biste se fokusirali na određene tipove 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 koristeći ovu sistemsku funkciju:

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 red po događaju s detaljima u XML formatu.

7.2.2 Parsiranje XML podataka o događajima

Izvucite specifične vrijednosti iz XML podataka o događajima:

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 Konvertovanje podataka događaja u tabele

Kreirajte 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 prstenastog bafera

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 Sistemski prikazi 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 serveru:

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 tokom 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 akcije 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 završ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 po bazi podataka ili aplikaciji

Fokusirajte se na specifične baze podataka ili aplikacije koristeći predikate:

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

Kreirajte 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

Izdvoji i analiziraj informacije 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';

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

8.3 Problemi s performansama praćenja upita

Identifikujte upite sa slabim performansama koristeći metrike 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 snimanje 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 i 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 dozvola

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 Praćenje na nivou 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 promjena 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ćavajuć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 greške

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

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

Greška 823 ukazuje na greške u ulazno/izlaznim operacijama, 824 signalizira greške logičke konzistentnosti, a 825 prijavljuje uspješne pokušaje č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 zabilježene su u tabeli msdb.dbo.suspect_pages.

8.6.1.3 errorlog_written događaj

Zabilježi unose zapisane u SQL Server zapisnik grešaka:

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

8.6.2 Kreiranje sesije praćenja korupcije

Uspostaviti sveobuhvatnu sesiju za otkrivanje i praćenje korupcije.

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

Kreirajte ciljanu sesiju s fokusom 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 nivoa ozbiljnosti

Uključite greške visokog stepena ozbiljnosti koje mogu ukazivati ​​na korupciju:

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

Stepen ozbiljnosti 20 i više ukazuje na probleme na nivou sistema koji se često odnose na korupciju.

8.6.2.3 Konfigurisanje cilja datoteke događaja za upozorenja

Pohranite 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

Izdvojite i interpretirajte događaje povezane s korupcijom iz prikupljenih podataka.

8.6.3.1 Identifikacija 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 greške i konteksta

Analizirajte događaje prijavljene greške (error_reported) 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 sa DBCC CHECKDB

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

8.6.4.1 Pokretanje DBCC CHECKDB na osnovu 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 vrši temeljitu validaciju.

8.6.4.2 Automatizirani tokovi rada za odgovor na korupciju

Implementirajte automatske odgovore praćenjem datoteke događaja:

  1. konfigurisati 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 e-mail obavještenja DBA-ovima s detaljima događaja i rezultatima DBCC CHECKDB-a.
  4. Zabilježite nalaze u centraliziranu tabelu za praćenje radi analize trendova.
8.6.4.3 Balansiranje proaktivnog praćenja i performansi

Prošireni događaji nude detekciju korupcije s malim opterećenjem u poređenju sa čestim izvršavanjem DBCC CHECKDB:

  • Neprekidno pokreći proširene događaje za otkrivanje korupcije u stvarnom vremenu
  • Izvrši DBCC CHECKDB samo kada se pojave indikatori korupcije
  • Zakažite redovnu DBCC CHECKDB tokom perioda održavanja
  • Koristite proširene događaje za identifikaciju baza podataka koje zahtijevaju hitnu pažnju

Ovaj pristup omogućava proaktivno praćenje bez značajne potrošnje resursa za stalne provjere 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 uglavnom nudi veću stopu oporavka na ozbiljno oštećenim bazama podataka.

9. Prošireni događaji u opsegu servera u odnosu na proširene događaje u opsegu baze podataka

9.1 Sesije događaja u opsegu servera

Sesije ograničene na server prate aktivnost u cijelom SQL Server instanca. Ove sesije se kreiraju pomoću klauzule 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 ograničene na server hvataju događaje iz svih baza podataka i pogodne su za praćenje na nivou instance.

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

Sesije ograničene na bazu podataka ograničene su na jednu bazu podataka i prvenstveno se koriste u Azure SQL bazi podataka gdje je pristup na nivou servera 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 se pohranjuju u Azure Blob Storage, a ne u lokalne datotečne sisteme.

9.3 Razlike i slučajevi upotrebe

Sesije ograničene na server pružaju sveobuhvatno praćenje svih baza podataka, ali zahtijevaju povišene dozvole. Sesije ograničene na bazu podataka nude izolaciju i prikladne su za praćenje određenih aplikacija ili korisnika.

Koristite sesije ograničene na server za centralizirano praćenje, rješavanje problema s performansama u bazama podataka i sigurnosnu reviziju. Koristite sesije ograničene na bazu 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 podrazumevano ograničene na bazu podataka, a skladištenje datoteka događaja koristi Azure Blob Storage umesto lokalnih datotečnih sistema.

Autentifikacija za Azure Blob Storage zahtijeva SAS token konfiguriran unutar cilja datoteke događaja. Nizovi za povezivanje upućuju na račun za pohranu i kontejner u kojem se pohranjuju 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: Skladištenje zasnovano na memoriji sa istim ponašanjem kao i lokalno
  • 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 Kreiranje sesija ograničenih na bazu podataka

Kreirajte 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 server u lokalnim okruženjima, 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 su dizajnirani 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 snimate
  • Izbjegavajte prikupljanje nepotrebnih radnji koje povećavaju opterećenje obrade
  • Odaberite odgovarajuće ciljeve na osnovu potreba za zadržavanjem podataka
  • Postavite razumne veličine bafera 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 direktno odgovaraju na vaše ciljeve praćenja. Izbjegavajte događaje visoke učestalosti osim ako nije neophodno i uvijek primjenjivajte 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 ciljeva

Odaberite ciljeve na osnovu vaših analitičkih zahtjeva:

  • Koristite event_file za detaljnu historijsku analizu i dugoročno zadržavanje
  • Koristite ring_buffer za praćenje u realnom vremenu uz minimalan uticaj na I/O operacije.
  • Koristite event_counter kada je važna samo frekvencija
  • Koristite histogram za analizu distribucije
  • Koristite pair_matching za analizu koreliranih događaja

11.4 Preporuke za konfiguraciju sesije

Konfigurišite sesije sa odgovarajućim ograničenjima resursa:

  • Postavite MAX_MEMORY na osnovu očekivanog obima događaja i resursa servera
  • Koristite ALLOW_SINGLE_EVENT_LOSS za minimalne opterećenja u većini scenarija.
  • Postavite MAX_DISPATCH_LATENCY da biste uravnotežili potrebe u realnom vremenu s performansama
  • Koristite PER_CPU particioniranje memorije na višeprocesorskim sistemima
  • Izbjegavajte STARTUP_STATE=ON osim ako nije potreban kontinuirani nadzor

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

Konfigurišite 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 osnovu vaših zahtjeva za zadržavanje i dostupne memorije.

12. Rješavanje problema produženih događaja

12.1 Uobičajeni problemi i rješenja

Uobičajeni problemi proširenih događaja uključuju sesije koje ne prikupljaju 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 dozvole kako biste bili sigurni da imate pristup za pregled podataka sesije.
  5. Provjerite da li je ciljna konfiguracija ispravna i da li se u nju može pisati.
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 da biste smanjili broj događaja.
  2. Uklonite nepotrebne radnje koje prikupljaju dodatne podatke.
  3. Povećajte MAX_DISPATCH_LATENCY da biste smanjili učestalost pisanja.
  4. Promijenite EVENT_RETENTION_MODE na ALLOW_SINGLE_DOGAĐAJ_GUBITAK.
  5. Razmislite o korištenju ring_buffer umjesto event_file za događaje visoke frekvencije.

12.4 Problemi s ciljanim datotekama

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

  1. Potvrdite SQL Server Servisni račun ima dozvole za pisanje u ciljni direktorij.
  2. Osigurajte da je dostupno dovoljno prostora na disku.
  3. Provjerite da li navedena putanja postoji i da li je dostupna.
  4. Pregledajte konfiguraciju prebacivanja datoteka ako se datoteke ne prebacuju kako se očekuje.

12.5 Debuggiranje 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 Kreiranje 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. Ovo zahtijeva razvoj u C++ i integraciju sa SQL Server okvir za proširivost.

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

13.2 Predlošci sesija događaja

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

  1. U dijalogu Nova sesija kliknite na šablon ispustiti.
  2. Odaberite jedan od dostupnih predložaka kao što su Praćenje detalja upita ili Ispravnost sistema.
  3. Prilagodite predložak kako bi odgovarao vašim specifičnim zahtjevima.

13.3 Integracija s rješenjima za praćenje

Podaci o proširenim događajima mogu poslužiti kao osnova za rješenja za praćenje poslovanja:

  • Izvoz podataka o događajima u centralizirane sisteme za evidentiranje
  • Analiziranje datoteka događaja i učitavanje podataka u baze podataka za praćenje
  • Kreirajte prilagođene nadzorne ploče pomoću BI alata
  • Pokretanje upozorenja na osnovu određenih obrazaca događaja
  • Korelirajte 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:

  • Kreirajte poslove za pokretanje/zaustavljanje sesija tokom određenih vremenskih prozora
  • Zakazivanje analize i izvještavanja o datotekama događaja
  • Implementirajte politike 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 Konvertovanje 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 kolone praćenja iz SQL Server Profiler.

14.3 Poređenje performansi

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

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

15. zaključak

15.1 Sažetak ključnih koncepata

SQL Server Prošireni događaji pružaju moćan, lagan okvir za praćenje i rješavanje problema SQL ServerArhitektura se sastoji od događaja, akcija, predikata, ciljeva i sesija koje rade zajedno kako bi zabilježile relevantnu aktivnost servera.

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

Prošireni događaji pružaju superiorne performanse u poređenju sa SQL Server Profiler, a istovremeno pruža sveobuhvatnije mogućnosti praćenja. Sistem omogućava administratorima baza podataka i programerima da dijagnosticiraju probleme, optimiziraju performanse, poboljšaju sigurnost i održavaju usklađenost.

15.2 Sljedeći koraci i dodatni resursi

Da biste nastavili razvijati svoje 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 praćenje
  • Razviti biblioteku predložaka sesija za uobičajene scenarije praćenja

16 Odjeljak s često postavljanim pitanjima

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

A: SQL Server Extended Events je lagani sistem za praćenje performansi integriran u SQL Server Mehanizam baze podataka koji prikuplja detaljne informacije o radu servera 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 nego SQL Server Profiler. SQL Server Profiler je zastario i Microsoft preporučuje korištenje proširenih događaja za sve zadatke praćenja.

P: Mogu li prošireni događaji utjecati na SQL Server performanse?

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 kreiranje sesija proširenih događaja?

A: Potrebna vam je dozvola ALTER ANY EVENT SESSION za sesije ograničene na server ili dozvola CONTROL na bazi podataka za sesije ograničene na bazu podataka.

P: Kako da pregledam podatke o proširenim događajima?

O: Koristite SQL Server Preglednik podataka uživo u Management Studiju, upiti o datotekama događaja pomoću sys.fn_xe_file_target_read_file ili upiti o podacima prstenastog bafera putem DMV-ova.

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

A: Da, prošireni događaji mogu uhvatiti greš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. Akcije dodaju dodatne informacije zabilježenim događajima. Predikati filtriraju događaje na osnovu uslova kako bi se smanjila količina podataka.

P: Kako da pratim upite iz određenih aplikacija ili baza podataka?

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

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

A: Koristite event_file za trajno pohranjivanje i historijsku 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: Da li su prošireni događaji dostupni u Azure SQL bazi podataka?

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

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

A: Provjerite je li sesija pokrenuta, provjerite da li predikati filtriraju 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, koristite SQL Server Agentski poslovi za pokretanje/zaustavljanje sesija, analizu datoteka događaja, implementaciju politika zadržavanja i reagovanje na otkrivene uslove.

reference


o autoru

Yuan Sheng je viši administrator baze podataka (DBA) sa preko 10 godina iskustva u SQL Server okruženja i upravljanje bazama podataka u preduzećima. Uspješno je riješio stotine scenarija oporavka baza podataka u organizacijama finansijskih usluga, zdravstva i proizvodnje.

Yuan je specijaliziran 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 uvijek uključenei razvoj automatiziranih strategija za izradu sigurnosnih kopija i oporavak podataka za poslovne sisteme od kritične važnosti.

Svojim tehničkim znanjem i praktičnim pristupom, Yuan se fokusira na kreiranje sveobuhvatnih vodiča koji pomažu administratorima baza podataka i IT stručnjacima da riješe složene probleme. SQL Server efikasno rješava izazove. On prati najnovije SQL Server izdanja i Microsoftove tehnologije baza podataka koje se razvijaju, redovno testirajući scenarije oporavka kako bi osigurao da njegove preporuke odražavaju najbolje prakse iz stvarnog svijeta.

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

Podijeli sada: