Turinys paslėpti
8. Praktiniai naudojimo atvejai ir pavyzdžiai

1. Įvadas

1.1 Kas yra SQL Server Ilgalaikiai renginiai?

SQL Server „Extended Events“ yra supaprastinta našumo stebėjimo sistema, leidžianti administratoriams ir kūrėjams rinkti ir analizuoti išsamius serverio veiklos duomenis. Ši sistema yra integruota į SQL Server Duomenų bazių variklis ir teikia išsamias įžvalgas tiek apie įprastą veikimą, tiek apie trikčių šalinimo scenarijus.

1.2 Kodėl stebėjimui naudoti išplėstinius įvykius?

SQL Server Išplėstiniai įvykiai siūlo keletą įtikinamų pranašumų stebint duomenų bazes ir atliekant trikčių šalinimą:

  • Minimalus poveikis našumui dėl lengvos architektūros
  • Detali duomenų rinkimo ir įvykių filtravimo kontrolė
  • Pritaikomas duomenų rinkimas, pritaikytas konkretiems stebėjimo poreikiams
  • Galimybė vienu metu fiksuoti įvykius iš kelių paketų
  • Lanksčios filtravimo galimybės, leidžiančios sutelkti dėmesį į atitinkamas operacijas
  • Palaikymas gamybos sistemos stebėjimui nepabloginant naudotojo patirties
  • Išsamus našumo rodiklių stebėjimas
  • Išplėstinė diagnozėostic trikčių šalinimo galimybės
  • Atitikties reikalavimų audito sekos priežiūra
  • Realaus laiko ir istorinių duomenų analizės parinktys

1.3 Išplėstiniai įvykiai ir SQL Server Profiler

O SQL Server Profiler Nors buvo tradicinė stebėjimo priemonė, „MS SQL Extended Events“ siūlo efektyvesnę alternatyvą. „Extended Events“ sunaudoja mažiau sistemos išteklių ir siūlo geresnį mastelio keitimą gamybinėje aplinkoje.

SQL Server „Profiler“ dabar nebenaudojamas, o „Microsoft“ rekomenduoja pereiti prie išplėstinių įvykių visoms stebėjimo veikloms.

2. Išplėstinių įvykių architektūros supratimas

2.1 Išplėstinių įvykių modulio komponentai

Išplėstinių įvykių modulį sudaro keli pagrindiniai komponentai, kurie kartu fiksuoja, apdoroja ir saugo įvykių duomenis. Šių komponentų supratimas padeda kurti veiksmingus stebėjimo sprendimus.

  • Dispečeris: Dispečerinis komponentas koordinuoja įvykių srautą iš įvykių šaltinių į išplėstinių įvykių modulį. Kai įvykis suveikia, dispečerinis gauna pranešimą ir nukreipia jį į aktyvius seansus, kurie užsiprenumeravo tą konkretų įvykių tipą.
  • buferis: Buferio tempasrarPrieš įrašydami įvykių duomenis į atmintį, juos būtinai saugokite targauna. Šis buferizavimo mechanizmas pagerina našumą, sumažindamas įvesties/išvesties operacijų skaičių. Buferio dydį ir valdymo nustatymus galima konfigūruoti taip, kad būtų subalansuotas atminties naudojimas su duomenų fiksavimo reikalavimais.
  • Sesija: Seansas apibrėžia įvykių stebėjimo apimtį. Jis nurodo, kuriuos įvykius užfiksuoti, kokius veiksmus vykdyti, kurias predikatus taikyti ir kur saugoti rezultatus. Seansus galima kurti, modifikuoti,...tarted ir sustojo savarankiškai.
  • Targauti egzempliorių: Tar„get“ egzemplioriai nurodo užfiksuotų įvykių duomenų saugojimo vietas. Kiekvienas seansas gali rašyti į vieną ar kelias targaunami duomenys, pvz., failai, žiediniai buferiai arba skaitikliai. Targauna procesą ir išsaugo įvykio informaciją vėlesnei analizei.

2.2 Renginių paketai

SQL Server Išplėstiniai įvykiai funkcionalumą tvarko paketuose. Kiekviename pakete yra susiję įvykiai, veiksmai, tipai, predikatai ir targauna. Įprasti paketai yra „sqlserver“, „sqlos“ ir „package0“.

  • „SQLServer“ paketas teikia duomenų bazei būdingus įvykius, pvz., užklausas ir operacijas.
  • „SQLOS“ pakete yra operacinės sistemos įvykiai.
  • „package0“ siūlo bendrosios paskirties funkcijas, naudojamas visuose paketuose.

2.3 Įvykių tipai ir laukai

Įvykiai atspindi įvykius viduje SQL Server kurį norite stebėti. Kiekvienas įvykio tipas turi iš anksto apibrėžtus laukus, kuriuose fiksuojama svarbi informacija. Pavyzdžiui, įvykis „sql_statement_completed“ apima trukmės, procesoriaus laiko, skaitymų ir rašymo laukus.

Įvykiai gali būti sinchroniniai arba asinchroniniai. Sinchroniniai įvykiai suveikia pačios operacijos metu, o asinchroniniai – jai pasibaigus. Įvykių charakteristikų supratimas padeda pasirinkti tinkamus įvykius pagal stebėjimo poreikius.

2.4 akcijų

Veiksmai prideda papildątary informaciją užfiksuotiems įvykiams. Kai įvykis suveikia, vykdomi susiję veiksmai, siekiant surinkti papildomą kontekstą, pvz., SQL tekstą, sesijos ID arba iškvietimų steko informaciją.

Įprasti veiksmai apima sql_text, skirtą užklausos teiginiams užfiksuoti, database_name, skirtą duomenų bazei identifikuoti, ir client_h.ostpavadinimas, skirtas kilmės serveriui sekti. Veiksmai suteikia esminį kontekstą trikčių šalinimui ir analizei.

2.5 Targauna

Tarnustato, kaip ir kur saugomi įvykių duomenys. SQL Server Išplėstiniai įvykiai palaiko kelis targauti tipus, įskaitant:

  • event_file diske saugojimui, užtikrinant nuolatinę saugyklą išsamiai analizei
  • „ring_buffer“ atminties pagrindu veikiančiam duomenų saugojimui, suteikiantis greitą prieigą prie naujausių įvykių su minimaliomis sąnaudomis
  • event_counter paprastam skaičiavimui
  • grupavimo histograma
  • pair_matching, skirtas koreliuojantiems susijusiems įvykiams

2.6 Predikatai (filtrai)

Predikatai filtruoja įvykius pagal nurodytas sąlygas, taip sumažindami užfiksuotų duomenų kiekį. Galite filtruoti pagal duomenų bazės pavadinimą, programos pavadinimą, seanso ID, trukmės slenksčius arba bet kurią įvykio lauko reikšmę.

Efektyvus predikatų naudojimas sumažina poveikį našumui, fiksuojant tik svarbius įvykius. Sudėtingi predikatai sujungia kelias sąlygas naudodami loginius operatorius, kad sukurtų tikslius filtravimo kriterijus.

3. Išplėstinės įvykių sesijos būsenos ir gyvavimo ciklas

3.1 Seanso būsenos: CREATE, ALTER ir DROP

Išplėstinių įvykių sesijos vyksta per skirtingas būsenas:

  • CREATE EVENT SESSION komanda apibrėžia naują sesiją, bet netarSeansas yra sustabdytoje būsenoje, kol nėra aiškiai aktyvuojamas.
  • Komanda „ALTER EVENT SESSION“ modifikuoja sesijos konfigūraciją arba jos būseną tarp „stopped“ ir „s“.tartedas.
  • DROP EVENT SESSION komanda visiškai pašalina sesijos apibrėžimą iš serverio.

3.2 Sesijos turinys ir charakteristikos

Kiekvieną sesiją sudaro įvykių, veiksmų rinkinys, targauna ir predikatus. Seansai turi numanomas ribas, kurios apibrėžia jų taikymo sritį ir elgseną. Konfigūracijos parinktys valdo atminties paskirstymą, įvykių išsaugojimą ir išsiuntimo delsą.

Seanso charakteristikos apima tai, ar jos išlieka skirtinguose serverio resursuose.tarts, maksimalų atminties paskirstymą ir kaip jie tvarko atminties spaudimą. Šie nustatymai daro didelę įtaką sesijos elgsenai ir išteklių sunaudojimui.

3.3 Sesijos ribos ir paketai

Seanso ribos apibrėžia ryšius tarp įvykių, targets ir packages. Vieno paketo įvykiai gali suaktyvinti veiksmus iš kito paketo, taip suteikdami duomenų rinkimo strategijų lankstumo.

Paketų ryšiai leidžia sujungti įvykius iš kelių šaltinių viename seanse. Ši galimybė leidžia atlikti išsamius stebėjimo scenarijus, apimančius skirtingus SQL Server posistemių.

4. Išplėstinių įvykių sesijų kūrimas naudojant SSMS

4.1 Būtinos sąlygos ir sąranka

Prieš kuriant SQL Server Išplėstinių įvykių seansų atveju įsitikinkite, kad turite atitinkamas teises. Serverio apimties seansams reikia leidimo „KEISTI BET KOKĮ ĮVYKĮ SESIJOS“ arba duomenų bazės apimties seansams – leidimo „VALDYTI“ duomenų bazėje.

Patikrinkite tai SQL Server „Management Studio“ įdiegta ir prijungta prie jūsų targauti egzempliorių. Susipažinkite su stebėjimo reikalavimais ir nustatykite, kurie įvykiai ir targeriausiai atitiks jūsų poreikius.

4.2 Prieiga prie išplėstinių įvykių objektų naršyklėje

Norėdami pasiekti išplėstinių įvykių sąsają SSMS, atlikite šiuos veiksmus:

  1. Atviras SQL Server „Management Studio“ ir prisijunkite prie savo SQL Server instancija.
  2. Objektų naršyklėje išplėskite valdymas -> Išplėstiniai įvykiai.
  3. Išplėstinių įvykių mazge yra Posėdžiai bei Paketai aplankai, skirti stebėjimo konfigūracijoms tvarkyti.

Pasiekite išplėstinių įvykių sąsają SQL Server Vadybos studija.

4.3 Sukurti naują sesiją

Norėdami sukurti naują sesiją:

    1. Dešiniuoju pelės mygtuku spustelėkite ant Posėdžiai aplankas po Išplėstiniai įvykiai.
    2. pasirinkti Nauja sesija , kad atidarytumėte konfigūracijos dialogą. Tolesniame turinyje šis metodas bus naudojamas naujam seansui sukurti.

Sukurkite naują išplėstinių įvykių sesiją SQL Server Vadybos studija.

Pastaba: Naujo seanso vedlys taip pat galima įsigyti ir labiau su gidu vedamą patirtį.

4.3.1 Bendroji puslapio konfigūracija

Dėl bendras puslapyje konfigūruokite pagrindines sesijos ypatybes:

  1. Įveskite sesijos pavadinimą lauke Sesijos pavadinimas laukas. Naudokite aprašomuosius pavadinimus, kurie nurodo stebėjimo tikslą.
  2. Pasirinktinai pasirinkite Start įvykio sesija serveryje starvamzdis kad įjungtumėte automatinį seanso aktyvavimą.
  3. Numatytasis sesijos šablonas yra TuščiasGalite naudoti kitus šablonus, jei naudojate iš anksto nustatytą konfigūraciją.

Išplėstinių įvykių sesijos bendrasis puslapis SQL Server Vadybos studija.

4.3.2 Įvykių puslapio nustatymai

Geriausios Renginiai puslapyje galite pasirinkti, kuriuos įvykius stebėti:

  1. Pasirinkite Renginiai puslapis iš kairės Pasirinkite puslapį skydelis.
  2. Lauke Renginių bibliotekarary, naršykite galimus renginius arba naudokite paieškos funkciją.
  3. Filtruokite įvykius įvesdami raktinius žodžius, pvz., „sql_statement_completed“, kad rastumėte atitinkamus įvykius.
  4. Pasirinkite norimą įvykį, pvz., sql_statement_completed.
  5. Spustelėkite rodyklės dešinėn mygtuką, kad perkeltumėte įvykį į Pasirinkti renginiai sąrašas.

Išplėstinių įvykių sesijos įvykių puslapis SQL Server Vadybos studija.

4.3.3 Duomenų saugyklos konfigūracija

Geriausios Duomenų saugojimas puslapyje apibrėžiama, kur saugomi įvykių duomenys:

  1. Pasirinkite Duomenų saugojimas puslapis iš kairės Pasirinkite puslapį skydelis.
  2. Lauke Targauna sritį, pasirinkite tarišskleidžiamajame meniu gaukite tipą.

Išplėstinių įvykių sesijos duomenų saugojimo puslapis SQL Server Vadybos studija.

(1) įvykių_failas Targauti

Įvykio_failas tar„get“ saugo duomenis disko failuose su plėtiniu .xel:

  1. pasirinkti įvykių_failas nuo targauti tipo išskleidžiamąjį meniu.
  2. Nurodykite failo kelią, pvz., C:\temp\YourSession_Targauti.xel.
  3. Konfigūruokite perkėlimo parinktis, kad valdytumėte disko vietą, nustatydami maksimalų failo dydį ir failų skaičių.
  4. Geriausios tar„get“ nuolat rašo įvykius, kol sesija sustoja arba pasiekiami saugyklos apribojimai.

Nustatykite sesiją targauti į event_file SSMS sistemoje

(2) žiedinis_buferis Targauti

Žiedinis buferis tar„get“ saugo įvykius atmintyje, kad būtų galima greitai pasiekti juos be disko įvesties/išvesties:

  1. pasirinkti žiedinis_buferis kaip targauti tipą.
  2. Konfigūruokite maksimalų buferio atminties paskirstymą.
  3. Supraskite, kad senesni įvykiai atmetami, kai buferis užsipildo, todėl tai tinka naujausiai veiklai stebėti.

Nustatyti targauti ring_buffer išplėstinių įvykių sesijai SQL Server Vadybos studija.

(3) įvykių_skaitiklis Targauti

Įvykių skaitiklis tar„get“ tiesiog skaičiuoja įvykių dažnumą nesaugodama išsamių duomenų. Tai sumažina išlaidas, kai reikia tik dažnio informacijos.

Nustatyti targauti išplėstinių įvykių sesijos įvykių_skaitiklį SQL Server Vadybos studija.

(4) histograma Targauti

Histograma tar„Get“ grupuoja įvykius pagal nurodytą lauko reikšmę, taip sukurdamas pasiskirstymo statistiką. Tai naudinga norint nustatyti dažnus modelius arba didelio dažnio reikšmes.

Nustatyti targauti išplėstinių įvykių sesijos histogramą SQL Server Vadybos studija.

(5) porų_suderinamumas Targauti

Porų atitikimas targauti koreliuojamus susijusius įvykius, tokius kaip užrakto gavimas ir atrakinimas. Tai leidžia analizuoti suporuotas operacijas ir jų laiko ryšius.

Nustatykite sesiją targauti pair_matching SSMS sistemoje

4.3.4 Išplėstiniai nustatymai

Geriausios pažangus puslapyje pateikiamos sesijos lygio konfigūracijos parinktys:

  1. Pasirinkite pažangus puslapis iš kairės Pasirinkite puslapį skydelis.
  2. Nustatyti Įvykių saugojimo režimas kontroliuoti, kaip įvykiai tvarkomi esant atminties spaudimui.
  3. Nustatyti Maksimalus išsiuntimo delsos laikas subalansuoti apdorojimą realiuoju laiku su sistemos našumu.
  4. Nustatyti Maksimalus atminties dydis bei Maksimalus įvykio dydis atsižvelgiant į jūsų stebėjimo reikalavimus.
  5. pasirinkti Atminties skaidymo režimas optimizuoti vieno arba kelių procesorių aplinkoms.

Išplėstinis sesijos puslapis SQL Server Vadybos studija.

4.4 Įvykių filtrų (predikatų) konfigūravimas

Predikatai sumažina duomenų kiekį filtruodami įvykius pagal konkrečius kriterijus. Norėdami konfigūruoti filtrus:

  1. Dėl Renginiai puslapyje pasirinkite įvykį, kurį norite filtruoti, pvz., „sql_statement_completed“.
  2. Spauskite Nustatyti , kad atidarytumėte įvykio konfigūracijos dialogo langą.
    Konfigūruokite išplėstinių įvykių seanso įvykį SQL Server Vadybos studija.
  3. Pasirinkite Filtras (Predikatas) skirtukas.
  4. Lauke Laukas Išskleidžiamajame sąraše pasirinkite lauką, pagal kurį norite filtruoti, pvz., trukmę.
  5. Pasirinkite a operatorius, pvz., „>“.
  6. Įveskite filtrą Vertė, pvz., 1000000 (1 sekundė).
  7. Jei reikia, pridėkite daugiau sąlygų.

Konfigūruokite įvykio filtrus (predikatus).

4.5 Veiksmų ir įvykių laukų pasirinkimas

Kiekvienam įvykiui galite pasirinkti, kokius duomenis rinkti:

  1. Dėl Renginiai puslapyje pasirinkite įvykį, kuriam norite pasirinkti duomenis, pvz., „sql_statement_completed“.
  2. Spauskite Nustatyti , kad atidarytumėte įvykio konfigūracijos dialogo langą.
  3. Pasirinkite Visuotiniai laukai (veiksmai) skirtukas.
  4. Pasirinkite veiksmus, kad pridėtumėte papildątary informaciją, pvz., duomenų bazės_pavadinimą arba kliento_programos_pavadinimą.
    Konfigūruoti įvykio veiksmus.
  5. Peržiūrėkite Renginių laukai skiltyje, kad pamatytumėte, kurie laukai fiksuojami automatiškai.
  6. Išvalykite visus nereikalingus laukus, kad sumažintumėte duomenų kiekį.
    Konfigūruokite įvykio laukus.

4.6 Starsesijų planavimas ir valdymas

Sukonfigūravę sesiją, galitetarjį ir stebėkite jo veikimą:

  1. Spauskite OK sesijai sukurti.
  2. Objektų naršyklėje išplėskite Posėdžiai aplanką, kad pamatytumėte savo naują sesiją.
  3. Dešiniuoju pelės mygtuku spustelėkite sesijos pavadinimą ir pasirinkite Start sesija pradėti fiksuoti įvykius.
    Start išplėstinių renginių sesija SQL Server Vadybos studija.
  4. Norėdami peržiūrėti tiesioginius duomenis, dešiniuoju pelės mygtuku spustelėkite sesiją ir pasirinkite Tiesioginio stebėjimo duomenys.
    Stebėkite tiesioginius išplėstinių įvykių sesijos duomenis SQL Server Vadybos studija.
  5. Sustabdykite sesiją spustelėdami dešinįjį pelės mygtuką ir pasirinkdami Sustabdyti sesiją.

5. Išplėstinių įvykių sesijų kūrimas naudojant T-SQL

5.1 ĮVYKIO SESIJOS KŪRIMO sintaksė

Išplėstinių įvykių seansų kūrimas naudojant T-SQL užtikrina tikslų valdymą ir įgalina scenarijų kūrimą automatiniam diegimui. CREATE EVENT SESSION komanda laikosi konkrečios sintaksės struktūros.

Pagrindinė sintaksė apima sesijos pavadinimą, kiekvieno įvykio ADD EVENT sąlygas, ADD TARGET sąlygos saugojimo paskirties vietoms ir pasirenkamos WITH sąlygos sesijos konfigūracijai.

5.2 Pagrindinio įvykio seanso kūrimas

Bazinė sesija stebi konkrečius įvykius ir įrašo rezultatus į targauti. Štai kaip sukonstruoti esminius komponentus.

5.2.1 Sesijos pavadinimo ir parinkčių apibrėžimas

Starsukurdami sesiją su aprašomuoju pavadinimu:

CREATE EVENT SESSION [SampleSession] ON SERVER

ON SERVER sąlyga sukuria serverio aprėpties seansą, kuris išlieka ir po duomenų bazės pakeitimų. „Azure SQL“ duomenų bazės atveju naudokite ON DATABASE duomenų bazės aprėpties seansams.

5.2.2 Įvykių pridėjimas naudojant ADD EVENT

Pridėkite įvykius, kuriuos norite užfiksuoti, naudodami sąlygą ADD EVENT:

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

Tai fiksuoja visus užbaigtus SQL sakinius. Galite pridėti kelis įvykius įtraukdami papildomas ADD EVENT sąlygas.

5.2.3 Įvykių veiksmų konfigūravimas

Veiksmai renka papildomą kontekstą kiekvienam įvykiui. Pridėkite veiksmus skliausteliuose po įvykio pavadinimo:

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

Šiame pavyzdyje fiksuojamas kiekvieno užbaigto sakinio SQL tekstas, duomenų bazės pavadinimas ir vartotojo vardas.

5.2.4 Įvykių predikatų nustatymas (WHERE sąlyga)

Predikatai filtruoja įvykius, kad sumažintų duomenų kiekį. Įvykio apibrėžime naudokite WHERE sąlygą:

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

Tai filtruoja teiginius, kurių trukmė didesnė nei 5 sekundės (5 000 000 mikrosekundžių).

5.3 Įvykio pridėjimas Targauna

Tarapibrėžia, kur saugomi įvykių duomenys ir kaip jie apdorojami.

5.3.1 PRIDĖTI TARGET sintaksė

papildyti tarnaudoja ADD TARGET sąlyga po visų įvykių apibrėžimo:

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

„package0“ prefiksas nurodo tar„get“ yra iš bazinio paketo.

5.3.2 Konfigūravimas Targauti parametrus

kiekvienas tar„get“ tipas priima konkrečius parametrus. „event_file“ sukonfigūruokite „filename“, „max_file_size“ ir „max_rollover_files“:

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

Ši konfigūracija sukuria iki 50 MB dydžio failus, o perkėlimo metu išlaikoma iki 5 failų.

5.4 Seanso parinktys ir nustatymai

WITH sąlyga konfigūruoja seanso lygio parinktis, kurios kontroliuoja elgseną ir išteklių naudojimą.

5.4.1 MAX_MEMORY ir EVENT_RETENTION_MODE

Valdykite atminties paskirstymą ir įvykių apdorojimą esant spaudimui:

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

EVENT_RETENTION_MODE parinktys apima ALLOW_SINGLE_EVENT_LOSS minimaliam atminties naudojimui, ALLOW_MULTIPLE_EVENT_LOSS vidutinėms apkrovoms ir NO_EVENT_LOSS visiškam duomenų išsaugojimui c.ost galimo poveikio našumui.

5.4.2 MAKSIMALUS DISPATCH_LATENCY

Nustatykite maksimalų laiką, kiek įvykiai gali būti buferiuose prieš įrašant į targauna:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Mažesnės vertės suteikia daugiau realaus laiko duomenų cost padidėjusių įvesties / išvesties operacijų.

5.4.3 ATMINTIES_SKAIČIO_REŽIMAS

Optimizuokite atminties skaidymą pagal savo aparatinės įrangos konfigūraciją:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Galimos parinktys: NONE vienam skaidiniui, PER_NODE NUMA sistemoms ir PER_CPU maksimaliam lygiagretumui kelių procesorių sistemose.

5.5 StarSeansų sustabdymas, sustabdymas ir keitimas

Tvarkykite seanso būseną ir konfigūraciją naudodami ALTER EVENT SESSION komandas.

5.5.1 ĮVYKIO KEITIMO SESIJA Start/Stop

Starsesija po sukūrimo:

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

Sustabdyti bėgimo sesiją:

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

5.5.2 Esamų sesijų modifikavimas

Sustabdžius sesijos konfigūraciją, pakeiskite ją. Pridėkite įvykius:

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

Pašalinti įvykius:

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

5.5.3 Įvykių sesijų nutraukimas

Visiškai pašalinti sesiją naudojant DROP EVENT SESSION:

DROP EVENT SESSION [SampleSession] ON SERVER;

Seansas turi būti sustabdytas prieš nuleidžiant.

6. Darbas su įvykiu Tardetalizuojasi

6.1 įvykių_failas Targauti konfigūraciją

Įvykio_failas tar„get“ teikia nuolatinę įvykių duomenų saugyklą su lanksčiomis konfigūravimo parinktimis.

6.1.1 Failo kelias ir pavadinimų suteikimo konvencijos

Nurodykite visą įvykių failų kelią ir failo pavadinimą:

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

Išplėstiniams įvykių žurnalų failams naudokite .xel plėtinį. Įsitikinkite, kad SQL Server Paslaugos paskyra turi rašymo teises į nurodytą katalogą.

6.1.2 Failų perkėlimas ir dydžio valdymas

Konfigūruokite automatinį failų perkėlimą, kad valdytumėte disko vietą:

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

Kai failas pasiekia 50 MB, SQL Server Išplėstiniai įvykiai sukuria naują failą su padidinta priesaga. Pasiekus 10 failų, seniausias failas perrašomas.

6.1.3 Įvykių failo duomenų skaitymas

Užklausos įvykių failo duomenys naudojant sys.fn_xe_file_tarFunkcija „get_read_file“:

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

Pakaitos simbolių šablonas nuskaito visus su sesija susijusius failus.

6.2 žiedinis buferis Targauti naudojimą

Žiedinis buferis tarGaukite atmintyje saugomus įvykius, kad galėtumėte greitai pasiekti naujausią veiklą.

6.2.1 Atmintyje pagrįstas įvykių saugojimas

Konfigūruokite „ring_buffer“ atminties pagrindu veikiančiai saugyklai:

ADD TARGET package0.ring_buffer

Įvykiai lieka prieinami tik tada, kai sesija aktyvi ir SQL Server veikia. Duomenys yra lost kai sesija sustoja arba serveris vėltarTS.

6.2.2 Buferio dydis ir konfigūracija

Žiedinio buferio atminties paskirstymo valdymas:

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

Nurodykite atmintį KB. Kai buferis užsipildo, senesni įvykiai atmetami naudojant FIFO metodą.

6.2.3 Žiedinio buferio duomenų užklausa

Prieiga prie žiedinio buferio duomenų per DMV:

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

Geriausios tar„get_data“ yra XML formato įvykių informacija.

6.3 įvykių_skaitiklis Targauti

Įvykių skaitiklis tar„get“ teikia paprastą skaičiavimą be išsamaus duomenų saugojimo:

ADD TARGET package0.event_counter

tai tarGaukite įvykių dažnio stebėjimo įrankius su minimaliomis sąnaudomis, tai naudinga didelio masto stebėjimui, kai svarbūs tik skaičiai.

6.4 histograma Targauti

Histograma targauti grupių įvykius pagal lauko reikšmes:

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

Ši konfigūracija sukuria histogramą, rodančią įvykių pasiskirstymą duomenų bazėse.

6.5 porų_suderinamumas Targauti

Porų atitikimas targauti koreliuojančius susijusius įvykius, tokius kaip užraktų įsigijimas su išleidimais:

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

Tai leidžia analizuoti suporuotas operacijas ir jų trukmę.

7. Išplėstinių įvykių duomenų peržiūra ir analizė

7.1 Tiesioginių duomenų peržiūra naudojant SSMS

SQL Server „Management Studio“ teikia grafinę sąsają išplėstinių įvykių duomenims peržiūrėti realiuoju laiku:

  1. Objektų naršyklėje išplėskite valdymas -> Išplėstiniai įvykiai -> Posėdžiai.
  2. Dešiniuoju pelės mygtuku spustelėkite aktyvų seansą.
  3. pasirinkti Tiesioginio stebėjimo duomenys , kad atidarytumėte tiesioginių duomenų peržiūros programą.
    Stebėkite tiesioginius išplėstinių įvykių sesijos duomenis SQL Server Vadybos studija.
  4. Įvykiai tinklelyje rodomi jiems įvykstant.
  5. Spustelėkite atskirus įvykius, kad išsamios informacijos srityje peržiūrėtumėte išsamias lauko reikšmes.
    Stebėkite tiesioginius renginių duomenis, įskaitant renginio informaciją.
  6. Norėdami sutelkti dėmesį į konkrečius įvykių tipus arba lauko reikšmes, naudokite įrankių juostos filtrus.

7.2 Įvykių failų duomenų užklausos naudojant T-SQL

T-SQL užklausos suteikia galimybę lanksčiai analizuoti užfiksuotus įvykių duomenis.

7.2.1 sys.fn_xe_file_tarFunkcija „get_read_file“

Skaitykite įvykių failo duomenis naudodami šią sistemos funkciją:

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 grąžina po vieną eilutę kiekvienam įvykiui su XML formato informacija.

7.2.2 XML įvykių duomenų analizavimas

Iš XML įvykių duomenų išgauti konkrečias reikšmes:

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“ išraiškos iš XML struktūros išskiria atskiras lauko reikšmes.

7.2.3 Įvykių duomenų konvertavimas į lenteles

Sukurkite struktūrizuotus rezultatų rinkinius iš įvykių duomenų:

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 Žiedinio buferio duomenų užklausa

Išgauti duomenis iš ring_buffer targauna:

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 Išplėstinių įvykių sistemos rodiniai

SQL Server teikia kelis DMV ir katalogo rodinius išplėstinių įvykių sesijoms valdyti ir stebėti.

7.4.1 sys.server_event_sessions

Peržiūrėti serveryje saugomus sesijos apibrėžimus:

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

Šiame katalogo rodinyje rodoma visų apibrėžtų seansų konfigūracijos informacija.

7.4.2 sys.dm_xe_sessions

Peržiūrėti šiuo metu aktyvius seansus:

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

Šis DMV teikia vykdymo laiko informaciją apie aktyvius išplėstinių įvykių seansus.

7.4.3 sys.dm_xe_session_targauna

Žiūrėti tarsusiejamas su aktyviais seansais:

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 Kiti naudingi DMV

Papildomi rodiniai suteikia išsamią informaciją apie sesiją:

  • sys.dm_xe_session_events: Išvardija aktyvių sesijų įvykius
  • sys.dm_xe_session_event_actions: Rodo veiksmus, sukonfigūruotus sesijos įvykiams
  • sys.dm_xe_objects: Katalogizuoja visus galimus įvykius, veiksmus ir targauna
  • sys.dm_xe_object_columns: Kiekvienam įvykių tipui prieinami išsamios informacijos laukai
  • sys.dm_xe_packages: Pateikia visų išplėstinių įvykių paketų sąrašą

8. Praktiniai naudojimo atvejai ir pavyzdžiai

8.1 SQL sakinio vykdymo stebėjimas

SQL sakinio vykdymo stebėjimas suteikia įžvalgų apie užklausų modelius ir našumo charakteristikas.

8.1.1 sql_statement_completed įvykių sekimas

Sukurkite sesiją, skirtą stebėti užbaigtus SQL sakinius:

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 Filtravimas pagal duomenų bazę arba programą

Sutelkite dėmesį į konkrečias duomenų bazes arba programas naudodami predikatus:

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 Aklavietės informacijos fiksavimas

Aklavietės analizei reikia surinkti išsamią informaciją apie konfliktuojančias operacijas.

8.2.1 xml_deadlock_report įvykis

Sukurkite sesiją, kad užfiksuotumėte pilnus aklavietės grafikus:

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 Aklavietės grafikų analizė

Išskleisti ir išanalizuoti aklavietės informaciją:

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

Aklavietės grafike pateikiama išsami informacija apie procesus, išteklius ir aukų atranką.

8.3 Stebėjimo užklausų našumo problemos

Nustatykite prastai veikiančias užklausas naudodami trukmės ir išteklių suvartojimo metrikas.

8.3.1 Ilgai veikiančių užklausų aptikimas

Užfiksuoti užklausas, viršijančias tam tikras trukmės ribas:

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 Vykdymo plano analizė

Užfiksuokite užklausų planus našumo analizei:

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 Prisijungimo ir saugumo įvykių stebėjimas

Stebėkite autentifikavimo ir autorizacijos veiklą saugumo auditui.

8.4.1 Prisijungimo sėkmės ir nesėkmės stebėjimas

Stebėkite sėkmingus ir nesėkmingus prisijungimo bandymus:

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 Leidimų pakeitimai

Stebėti saugos leidimų pakeitimus:

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 Duomenų bazės lygio stebėjimas

Stebėti su duomenų baze susijusias operacijas ir būsenos pokyčius.

8.5.1 Atsarginių kopijų kūrimo ir atkūrimo įvykiai

Stebėkite atsarginių kopijų kūrimo ir atkūrimo operacijas:

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 Duomenų bazės būsenos pakeitimai

Stebėkite duomenų bazės būsenos perėjimus:

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

8.6 Duomenų bazės sugadinimo ir vientisumo problemų aptikimas

SQL Server Išplėstiniai įvykiai suteikia ankstyvojo perspėjimo galimybes aptikti galimą duomenų bazės sugadinimą, leidžiantį aktyviai įsikišti, kol problemos neišaugs.

8.6.1 Svarbiausi korupcijos aptikimo įvykiai

Keletas įvykių signalizuoja apie galimą gedimą arba įvesties / išvesties problemas.

8.6.1.1 error_reported įvykis, skirtas kritinėms klaidoms

Įvykis „error_reported“ fiksuoja visus SQL Server klaidos, įskaitant su korupcija susijusių klaidų skaičius:

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

823 klaida rodo įvesties / išvesties klaidas, 824 klaida – loginio nuoseklumo klaidas, o 825 klaida – sėkmingus pakartotinius skaitymo bandymus, kurie gali rodyti aparatinės įrangos problemas.

8.6.1.2 duomenų bazės_įtariamųjų_duomenų_puslapio įvykis

Šis įvykis suveikia, kai SQL Server aptinka įtartiną puslapį:

ADD EVENT sqlserver.database_suspect_data_page

Įtartini puslapiai nurodo galimą sugadinimą ir yra įrašomi į lentelę msdb.dbo.suspect_pages.

8.6.1.3 errorlog_written Įvykis

Užfiksuokite įrašus, įrašytus į SQL Server klaidų žurnalas:

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

8.6.2 Korupcijos stebėsenos seanso kūrimas

Sukurti išsamią korupcijos nustatymo ir stebėsenos sesiją.

8.6.2.1 Iškraipymų klaidų skaičių filtravimas (823, 824, 825)

Sukurtia tarsesija, skirta korupcijos rodikliams:

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 Tinkamo svarbos lygio nustatymas

Įtraukite labai svarbias klaidas, kurios gali rodyti korupciją:

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

20 ir aukštesnis sunkumo lygis rodo sisteminio lygio problemas, kurios dažnai susijusios su korupcija.

8.6.2.3 Įvykių failo konfigūravimas Targauti įspėjimus

Išsaugoti korupcijos įvykius analizei ir įspėjimams:

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 Korupcijos įvykių duomenų analizė

Iš užfiksuotų duomenų išskirti ir interpretuoti su korupcija susijusius įvykius.

8.6.3.1 Įtartinų puslapių identifikavimas

Užklausa dėl „database_suspect_data_page“ įvykių:

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 Klaidos detalių ir konteksto išgavimas

Analizuokite „error_reported“ įvykius, ieškodami gedimo modelių:

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 su DBCC CHECKDB

Naudokite išplėstinių įvykių duomenis kaip vadovą DBCC CHECKDB vykdymas.

8.6.4.1 DBCC CHECKDB paleidimas pagal įvykius

Aptikus sugadinimo įvykius, vykdykite DBCC CHECKDB, kad būtų atliktas išsamus patikrinimas:

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

Išplėstiniai įvykiai teikia išankstinį įspėjimą, o DBCC CHECKDB atlieka išsamų patikrinimą.

8.6.4.2 Automatizuoti reagavimo į korupciją darbo eigos

Įdiekite automatinius atsakymus stebėdami įvykių failą:

  1. Nustatyti SQL Server Agento užduotis periodiškai pateikti užklausas apie sugadinimo stebėjimo įvykių failą.
  2. Aptikus sugadinimo įvykių, paveiktoje duomenų bazėje vykdykite komandą DBCC CHECKDB.
  3. Siųskite el. pašto įspėjimus duomenų bazių administratoriams su įvykių informacija ir DBCC CHECKDB rezultatais.
  4. Registruokite išvadas centralizuotoje stebėjimo lentelėje tendencijų analizei.
8.6.4.3 Iniciatyvaus stebėjimo ir našumo derinimas

Išplėstiniai įvykiai siūlo mažą naštą gedimų aptikimui, palyginti su dažnu DBCC CHECKDB vykdymu:

  • Nuolat vykdyti išplėstinius įvykius, kad būtų galima aptikti gedimus realiuoju laiku
  • Vykdyti DBCC CHECKDB tik tada, kai atsiranda sugadinimo indikatoriai
  • Planuokite įprastą DBCC CHECKDB techninės priežiūros laikotarpiu
  • Naudokite išplėstinius įvykius, kad nustatytumėte, kurioms duomenų bazėms reikia nedelsiant atkreipti dėmesį

Šis metodas užtikrina aktyvią stebėseną, nereikalaujant didelių išteklių, skirtų nuolatiniams vientisumo patikrinimams.

8.6.4.4 Sugadintos duomenų bazės taisymas

Jei duomenų bazėje aptinkama pažeidimų, nedidelius pažeidimus galite ištaisyti naudodami DBCC CHECKDB. Jei tai nepavyksta, galite išbandyti trečiosios šalies įrankį. SQL duomenų bazės atkūrimo įrankis, kuris paprastai siūlo didesnį atkūrimo rodiklį labai sugadintose duomenų bazėse.

9. Serverio ir duomenų bazės apimties išplėstiniai įvykiai

9.1 Serverio apimties įvykių sesijos

Serverio apimties seansai stebi veiklą visame SQL Server egzempliorius. Šie seansai sukuriami naudojant sąlygą ON SERVER ir išlieka pagrindinėje duomenų bazėje.

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

Serverio apimties seansai fiksuoja įvykius iš visų duomenų bazių ir yra tinkami stebėjimui egzemplioriaus lygmeniu.

9.2 Duomenų bazės apimties įvykių seansai („Azure SQL“ duomenų bazė)

Duomenų bazės apimties seansai apsiriboja viena duomenų baze ir daugiausia naudojami „Azure SQL“ duomenų bazėje, kur prieiga serverio lygmeniu yra apribota:

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

„Azure SQL“ duomenų bazėje įvykių failai saugomi „Azure Blob Storage“, o ne vietinėse failų sistemose.

9.3 Skirtumai ir naudojimo atvejai

Serverio aprėpties seansai užtikrina išsamų visų duomenų bazių stebėjimą, tačiau jiems reikalingos padidintos teisės. Duomenų bazės aprėpties seansai užtikrina izoliaciją ir yra tinkami stebint konkrečias programas ar nuomininkus.

Naudokite serverio apimties seansus centralizuotam stebėjimui, našumo trikčių šalinimui įvairiose duomenų bazėse ir saugumo auditui. Naudokite duomenų bazės apimties seansus „Azure SQL“ duomenų bazėje, kelių nuomininkų aplinkose arba deleguodami stebėjimo pareigas programų komandoms.

10. Išplėstiniai įvykiai „Azure SQL“ duomenų bazėje

10.1 Su „Azure“ susiję aspektai

„Azure SQL Database“ įdiegia išplėstinius įvykius su tam tikrais skirtumais nuo vietinių sprendimų SQL ServerPagal numatytuosius nustatymus seansai yra apriboti duomenų bazės, o įvykių failų saugykla naudoja „Azure Blob Storage“, o ne vietines failų sistemas.

Autentifikavimui „Azure Blob Storage“ reikalingas SAS prieigos raktas, sukonfigūruotas įvykio faile. targauti. Ryšio eilutės nurodo saugyklos paskyrą ir konteinerį, kuriame saugomi įvykių failai.

10.2 Tarpatenka į Azure

„Azure SQL“ duomenų bazė palaiko šiuos išplėstinius įvykius targauna:

  • event_file: Rašo į „Azure Blob“ saugyklą
  • ring_buffer: Atminties pagrindu veikianti saugykla, kurios veikimas toks pat kaip ir vietinės saugyklos
  • event_counter: Skaičiuoja įvykių pasikartojimus

Įvykio_failas tarnorint gauti reikia konfigūracijos su „Azure Blob Storage“ kredencialais:

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

10.3 Duomenų bazės apimties seansų kūrimas

Sukurkite sesiją „Azure SQL“ duomenų bazėje:

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;

Duomenų bazės apimties seansai „Azure“ sistemoje veikia panašiai kaip serverio apimties seansai vietinėje sistemoje, tačiau jų apimtis apribota dabartine duomenų baze.

11. Geriausia praktika ir našumo optimizavimas

11.1 Poveikio našumui mažinimas

Išplėstiniai įvykiai sukurti taip, kad būtų kuo mažiau sąnaudų, tačiau netinkama konfigūracija gali turėti įtakos našumui. Laikykitės šių gairių:

  • Naudokite konkrečius predikatus įvykiams filtruoti, o ne fiksuokite viską
  • Venkite rinkti nereikalingus veiksmus, kurie padidina apdorojimo išlaidas
  • Pasirinkite tinkamą targauna pagal duomenų saugojimo poreikius
  • Nustatykite pagrįstus buferio dydžius ir išsiuntimo delsą
  • Seanso išteklių suvartojimo stebėjimas naudojant DMV

11.2 Tinkamų įvykių ir filtrų pasirinkimas

Pasirinkite įvykius, kurie tiesiogiai atitinka jūsų stebėjimo tikslus. Venkite dažnai pasikartojančių įvykių, nebent tai būtina, ir visada taikykite predikatus, kad sumažintumėte duomenų kiekį.

Pavyzdžiui, užuot fiksavę visus sql_statement_completed įvykius, filtruokite pagal konkrečias duomenų bazes arba trukmės ribas:

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

11.3 Targauti atrankos gaires

Pasirinkti targauna pagal jūsų analizės reikalavimus:

  • Išsamiai istorinei analizei ir ilgalaikiam saugojimui naudokite „event_file“
  • Naudokite „ring_buffer“ stebėjimui realiuoju laiku su minimaliu įvesties/išvesties poveikiu
  • Naudokite „event_counter“, kai svarbus tik dažnis
  • Naudokite histogramą pasiskirstymo analizei
  • Koreliuojamų įvykių analizei naudokite pair_matching

11.4 Sesijos konfigūracijos rekomendacijos

Konfigūruokite sesijas su atitinkamais išteklių apribojimais:

  • Nustatykite MAX_MEMORY pagal numatomą įvykių kiekį ir serverio išteklius
  • Naudokite ALLOW_SINGLE_EVENT_LOSS, kad gautumėte minimalias pridėtines išlaidas metrais.ost scenarijai
  • Nustatykite MAX_DISPATCH_LATENCY, kad subalansuotumėte realaus laiko poreikius su našumu
  • Naudokite PER_CPU atminties skaidymą daugiaprocesorinėse sistemose
  • Venkite STARTUP_STATE=ON, nebent reikalingas nuolatinis stebėjimas

11.5 Įvykių failų dydžio ir saugojimo valdymas

Konfigūruokite failų perkėlimą, kad būtų išvengta neriboto disko naudojimo:

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

Ši konfigūracija saugo maždaug 1 GB įvykių duomenų (10 failų × 100 MB). Koreguokite pagal savo saugojimo reikalavimus ir turimą saugyklą.

12. Išplėstinių įvykių trikčių šalinimas

12.1 Bendrosios problemos ir sprendimai

Dažnos išplėstinių įvykių problemos apima seansų neužfiksuojamus duomenis, našumo pablogėjimą, failų tarkyla problemų ir netikėtas sesijos elgesys.

12.2 Seansas neužfiksuoja duomenų

Jei sesija neužfiksuoja numatytų įvykių:

  1. Patikrinkite, ar sesija yra started naudojant sys.dm_xe_sessions.
  2. Patikrinkite predikatus, kad įsitikintumėte, jog jie neatfiltruoja visų įvykių.
  3. Įvykių paleidimo pagal tempą patvirtinimasraršvelniai nuimant filtrus.
  4. Peržiūrėkite leidimus, kad įsitikintumėte, jog turite prieigą prie sesijos duomenų peržiūros.
  5. Patikrinkite tai tar„Gauti konfigūraciją“ yra teisinga ir įrašoma.
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Našumo pablogėjimas

Jei dėl išplėstinių įvykių kyla našumo problemų:

  1. Pridėkite predikatus, kad sumažintumėte įvykių skaičių.
  2. Pašalinkite nereikalingus veiksmus, kurie kaupia papildustary duomenis.
  3. Padidinkite MAX_DISPATCH_LATENCY, kad sumažintumėte rašymo dažnį.
  4. Pakeiskite EVENT_RETENTION_MODE į ALLOW_SINGLE_EVENT_LOSS.
  5. Dažnai pasitaikantiems įvykiams vietoj „event_file“ galite naudoti „ring_buffer“.

12.4 failas Targauti problemų

filė tarproblemos dažnai susijusios su leidimais arba disko vieta:

  1. Patikrinkite SQL Server paslaugos paskyra turi rašymo teises targauti katalogą.
  2. Įsitikinkite, kad diske yra pakankamai vietos.
  3. Patikrinkite, ar nurodytas kelias egzistuoja ir ar jis pasiekiamas.
  4. Jei failai neperkeliami taip, kaip tikėtasi, peržiūrėkite failų perkėlimo konfigūraciją.

12.5 Derinimas naudojant sistemos rodinius

Naudokite DMV, kad diagnozuotumėte išplėstinių įvykių problemas:

-- 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. Išplėstinės temos

13.1 Pasirinktinių įvykių paketų kūrimas

Patyrę vartotojai gali kurti pasirinktinius renginių paketus, kad juos išplėstų SQL Server Išplėstinis įvykių funkcionalumas. Tam reikia C++ kūrimo ir integravimo su SQL Server išplėtimo sistema.

Pasirinktiniai paketai leidžia stebėti konkrečioms programoms būdingus įvykius arba integruoti trečiųjų šalių stebėjimo sistemas su išplėstinių įvykių infrastruktūra.

13.2 Renginių sesijų šablonai

SSMS teikia integruotus šablonus įprastiems stebėjimo scenarijams. Pasiekite šablonus kurdami naujus seansus per vedlį:

  1. Dialogo lange „Naujas seansas“ spustelėkite mygtuką šablonas išskleidžiamasis.
  2. Pasirinkite iš galimų šablonų, pvz., „Užklausos detalių stebėjimas“ arba „Sistemos sveikata“.
  3. Modifikuokite šabloną pagal savo konkrečius reikalavimus.

13.3 Integravimas su stebėjimo sprendimais

Išplėstiniai įvykių duomenys gali būti naudojami įmonės stebėjimo sprendimams:

  • Eksportuoti įvykių duomenis į centralizuotas registravimo sistemas
  • Analizuoti įvykių failus ir įkelti duomenis į stebėjimo duomenų bazes
  • Kurkite pasirinktines ataskaitų suvestines naudodami BI įrankius
  • Suaktyvinti įspėjimus pagal konkrečius įvykių modelius
  • Koreliuoja SQL Server įvykiai su programos ir infrastruktūros metrika

13.4 Automatizavimas ir planavimas

Automatizuokite išplėstinių įvykių valdymą naudodami SQL Server Agentas:

  • Kurti užduotis start/stop sesijos tam tikrais laiko intervalais
  • Suplanuoti įvykių failų analizę ir ataskaitų teikimą
  • Įgyvendinkite duomenų saugojimo politiką archyvuodami arba ištrindami senus įvykių failus
  • Automatizuoti reagavimą į aptiktas sąlygas, pvz., našumo problemas ar saugumo įvykius

14. Migracija iš SQL Server Profiler

14.1 SQL Server Profilerio įvykių susiejimas su išplėstiniais įvykiais

„Microsoft“ teikia atvaizdavimą tarp SQL Server Profiler įvykiai ir išplėstiniai įvykiai. Įprasti susiejimai apima:

  • SQL:BatchCompleted -> sql_batch_completed
  • SQL:BatchStarting -> sql_batch_starTing
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starTing
  • Aklavietės grafikas -> xml_deadlock_report
  • Prisijungimas prie audito -> prisijungti
  • Atsijungimas audito metu -> atsijungti

14.2 Pėdsakų apibrėžimų konvertavimas

Konvertuoti esamą SQL Server Profiliavimo priemonė seka išplėstinių įvykių seansus, identifikuodama lygiaverčius įvykius ir konfigūruodama tinkamus predikatus. SSMS teikia pagalbą atliekant įprastus konvertavimus.

Peržiūrėkite sekimo filtrus ir konvertuokite juos į išplėstinių įvykių predikatus. Veiksmai išplėstiniuose įvykiuose pakeičia sekimo stulpelius iš SQL Server Profiliuotojas.

14.3 Našumo palyginimas

Išplėstiniai įvykiai užtikrina žymiai geresnį našumą nei SQL Server Profiler. Lyginamieji tyrimai rodo, kad išplėstiniai įvykiai sunaudoja mažiau procesoriaus ciklų ir daro mažesnę įtaką operacijų pralaidumui.

Išplėstiniai įvykiai naudoja asinchroninį apdorojimą ir optimizuotą atminties valdymą, tuo tarpu SQL Server Profiler naudoja sinchroninį įvykių fiksavimą, kuris blokuoja, kol nebaigiamas sekimo apdorojimas.

15. Išvada

15.1 Pagrindinių sąvokų santrauka

SQL Server „Extended Events“ suteikia galingą ir lengvą stebėjimo ir trikčių šalinimo sistemą. SQL ServerArchitektūra susideda iš įvykių, veiksmų, predikatų, targauna ir seansus, kurie kartu fiksuoja atitinkamą serverio veiklą.

Sesijas galima kurti naudojant SSMS arba T-SQL, o tai suteikia lankstumo tiek ad hoc trikčių šalinimui, tiek automatizuotam stebėjimui. tar„get“ tipai palaiko skirtingus analizės metodus – nuo ​​stebėjimo realiuoju laiku naudojant „ring_buffer“ iki istorinės analizės naudojant „event_file“.

Išplėstiniai įvykiai užtikrina geresnį našumą, palyginti su SQL Server Profiler, tuo pačiu suteikdama išsamesnes stebėjimo galimybes. Sistema leidžia duomenų bazių administratoriams ir kūrėjams diagnozuoti problemas, optimizuoti našumą, pagerinti saugumą ir palaikyti atitiktį reikalavimams.

15.2 Tolesni žingsniai ir papildomi ištekliai

Norėdami toliau tobulinti savo SQL Server „XEvents“ patirtis:

  • Įdiekite išplėstinius įvykius testavimo aplinkose, kad įgytumėte praktinės patirties
  • Peržiūrėkite „Microsoft“ dokumentaciją, kurioje pateikiami išsamūs įvykių katalogai ir išsami sintaksės nuoroda.
  • prisijungti SQL Server bendruomenės forumuose, kuriuose galima mokytis iš kitų patirties
  • Ištirkite išplėstinius scenarijus, tokius kaip pasirinktiniai paketai ir integracija su stebėjimo platformomis
  • Sukurti librarseansų šablonų, skirtų įprastiems stebėjimo scenarijams, skaičius

16 DUK skyrius

K: Kas yra SQL Server Ilgalaikiai renginiai?

A: SQL Server „Extended Events“ yra lengva našumo stebėjimo sistema, integruota į SQL Server Duomenų bazių variklis, kuris su minimaliomis sąnaudomis fiksuoja išsamią informaciją apie serverio operacijas.

K: Kuo skiriasi išplėstiniai įvykiai nuo SQL Server Profileris?

A: Išplėstiniai įvykiai užtikrina geresnį našumą, mažesnes išlaidas ir lankstesnę konfigūraciją nei SQL Server Profiliuotojas. SQL Server „Profiler“ nebenaudojamas, o „Microsoft“ rekomenduoja visoms stebėjimo užduotims naudoti išplėstinius įvykius.

K: Ar ilgalaikiai įvykiai gali turėti įtakos SQL Server spektaklis?

A: Tinkamai sukonfigūravus su atitinkamais predikatais ir išteklių apribojimais, išplėstiniai įvykiai turi minimalų poveikį našumui. Prasta konfigūracija be filtravimo gali turėti įtakos našumui.

K: Kokių leidimų reikia norint sukurti išplėstinio įvykio sesijas?

A: Serverio aprėpties seansams reikia leidimo „KEISTI BET KOKĮ ĮVYKĮ SESIJOS“ arba leidimo „VALDYTI“ duomenų bazėje, jei tai yra duomenų bazės aprėpties seansai.

K: Kaip peržiūrėti išplėstinių įvykių duomenis?

A: Naudokite SQL Server „Management Studio“ tiesioginių duomenų peržiūros programa, užklausos įvykių failams su sys.fn_xe_file_tar„get_read_file“ arba užklausti žiedinio buferio duomenis per DMV.

K: Ar išplėstiniai įvykiai gali aptikti duomenų bazės sugadinimą?

A: Taip, išplėstiniai įvykiai gali užfiksuoti su iškraipymu susijusias klaidas (823, 824, 825) ir įtartinus puslapio įvykius, taip iš anksto įspėdami apie galimas iškraipymo problemas.

K: Kuo skiriasi įvykiai, veiksmai ir predikatai?

A: Įvykiai yra įvykiai, kuriuos norite stebėti. Veiksmai papildotary informaciją užfiksuotiems įvykiams. Predikatai filtruoja įvykius pagal sąlygas, kad sumažintų duomenų kiekį.

K: Kaip stebėti užklausas iš konkrečių programų ar duomenų bazių?

A: Įvykio konfigūracijoje naudokite predikatus, kad filtruotumėte pagal „database_name“, „client_app_name“ ar kitus susijusius laukus.

Klausimas: Ką? tarką turėčiau naudoti ilgesniems renginiams?

A: Nuolatiniam saugojimui ir istorinei analizei naudokite „event_file“, mažoms sąnaudoms stebėti realiuoju laiku – „ring_buffer“, paprastam dažnio stebėjimui – „event_counter“, o pasiskirstymo analizei – histogram.

K: Ar „Azure SQL“ duomenų bazėje pasiekiami išplėstiniai įvykiai?

A: Taip, „Azure SQL“ duomenų bazė palaiko duomenų bazės apimties išplėstinius įvykius, kurių įvykių failai saugomi „Azure Blob Storage“.

K: Kaip pašalinti išplėstinių įvykių seanso, kuris nefiksuoja duomenų, triktis?

A: Patikrinkite, ar sesija yra starTed, patikrinkite, ar predikatai nefiltruoja visų įvykių, patvirtinkite targauti konfigūraciją ir peržiūrėti leidimus naudojant sistemos DMV.

K: Ar galiu automatizuoti išplėstinių įvykių valdymą?

A: Taip, naudokite SQL Server Agento darbo skelbimaitarsustabdyti sesijas, analizuoti įvykių failus, įdiegti saugojimo politikas ir reaguoti į aptiktas sąlygas.

Nuorodos


Apie Autorius:

Yuan Sheng yra vyresnysis duomenų bazių administratorius (DBA), turintis daugiau nei 10 metų patirtį SQL Server aplinkose ir įmonių duomenų bazių valdyme. Jis sėkmingai išsprendė šimtus duomenų bazių atkūrimo scenarijų finansinių paslaugų, sveikatos priežiūros ir gamybos organizacijose.

Yuan specializuojasi SQL Server duomenų bazių atkūrimas, didelio prieinamumo sprendimai ir našumo optimizavimas. Jo didelė praktinė patirtis apima kelių terabaitų duomenų bazių valdymą, „Always On Availability Groups“ diegimą ir automatizuotų atsarginių kopijų kūrimo bei atkūrimo strategijų, skirtų kritiškai svarbioms verslo sistemoms, kūrimą.

Pasitelkdamas savo technines žinias ir praktinį požiūrį, Yuanas daugiausia dėmesio skiria išsamių vadovų, padedančių duomenų bazių administratoriams ir IT specialistams spręsti sudėtingas problemas, kūrimui. SQL Server efektyviai meta iššūkius. Jis neatsilieka nuo naujausių žinių SQL Server leidimus ir besivystančias „Microsoft“ duomenų bazių technologijas, reguliariai testuodamas atkūrimo scenarijus, siekdamas užtikrinti, kad jo rekomendacijos atitiktų geriausią realią praktiką.

Turite klausimų apie SQL Server atkūrimo ar reikia papildomų duomenų bazės trikčių šalinimo nurodymų? Yuan mielai atsiliepimai ir pasiūlymai už šių techninių išteklių tobulinimą.