Bendrinti dabar:
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ės diagnostikos galimybės trikčių šalinimui
  • 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: Buferiai laikinai saugo įvykių duomenis atmintyje prieš rašydami į paskirties vietas. Šis buferavimo 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, pradėti ir sustabdyti nepriklausomai.
  • Tikslinis egzempliorius: Tiksliniai objektai yra užfiksuotų įvykių duomenų saugojimo vietos. Kiekvienas seansas gali rašyti į vieną ar kelis taikinius, pvz., failus, žiedinius buferius arba skaitiklius. Tiksliniai objektai apdoroja ir išsaugo įvykių informaciją vėlesnei analizei.

2.2 Renginių paketai

SQL Server „Extended Events“ funkcionalumą tvarko paketuose. Kiekviename pakete yra susiję įvykiai, veiksmai, tipai, predikatai ir tikslai. Į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 papildo užfiksuotus įvykius papildoma informacija. 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žklausų teiginiams užfiksuoti, „database_name“, skirtą duomenų bazei identifikuoti, ir „client_hostname“, skirtą kilmės serveriui sekti. Veiksmai suteikia esminį kontekstą trikčių šalinimui ir analizei.

2.5 Tikslai

Tikslai nustato, kaip ir kur saugomi įvykių duomenys. SQL Server Išplėstiniai įvykiai palaiko kelis taikinių 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 jos nepradeda. Seansas yra sustabdytoje būsenoje, kol nėra aiškiai aktyvuojamas.
  • Komanda „ALTER EVENT SESSION“ pakeičia sesijos konfigūraciją arba jos būseną iš sustabdytos į pradėtą.
  • DROP EVENT SESSION komanda visiškai pašalina sesijos apibrėžimą iš serverio.

3.2 Sesijos turinys ir charakteristikos

Kiekvieną seansą sudaro įvykių, veiksmų, taikinių ir predikatų rinkinys. Seansai turi numanomas ribas, kurios apibrėžia jų apimtį ir elgseną. Konfigūracijos parinktys valdo atminties paskirstymą, įvykių išsaugojimą ir išsiuntimo delsą.

Seanso charakteristikos apima tai, ar jos išlieka po serverio paleidimo iš naujo, maksimalų atminties paskirstymą ir kaip jos tvarko atminties spaudimą. Šie nustatymai daro didelę įtaką seanso elgsenai ir išteklių sunaudojimui.

3.3 Sesijos ribos ir paketai

Seanso ribos apibrėžia ryšius tarp įvykių, tikslų ir paketų. 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ų tikslinės instancijos. Susipažinkite su stebėjimo reikalavimais ir nustatykite, kurie įvykiai ir tikslai geriausiai atitinka 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 Pradėti įvykio sesiją serverio paleidimo metu 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ų biblioteka, 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 Tikslai srityje išskleidžiamajame meniu pasirinkite tikslinį tipą.

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

(1) event_file Paskirties vieta

„event_file“ paskirties vieta saugo duomenis disko failuose su plėtiniu .xel:

  1. pasirinkti įvykių_failas iš išskleidžiamojo meniu „Tikslo tipas“.
  2. Nurodykite failo kelią, pvz., C:\temp\YourSession_Target.xel.
  3. Konfigūruokite perkėlimo parinktis, kad valdytumėte disko vietą, nustatydami maksimalų failo dydį ir failų skaičių.
  4. Tikslinis įrenginys nuolat rašo įvykius, kol sesija sustoja arba pasiekiami saugyklos apribojimai.

SSMS nustatykite seanso tikslą į event_file

(2) ring_buffer paskirties vieta

„ring_buffer“ paskirties funkcija saugo įvykius atmintyje, kad būtų galima greitai pasiekti juos neįvedant disko:

  1. pasirinkti žiedinis_buferis kaip taikinio tipas.
  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.

Išplėstinių įvykių sesijai nustatykite paskirties vietą į ring_buffer SQL Server Vadybos studija.

(3) įvykių_skaitiklio taikinys

„event_counter“ paskirties funkcija tiesiog skaičiuoja įvykių dažnumą, nesaugant išsamių duomenų. Tai sumažina išlaidas, kai reikia tik dažnio informacijos.

Išplėstinių įvykių sesijai nustatykite paskirties vietą į event_counter SQL Server Vadybos studija.

(4) histogramos taikinys

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

Nustatykite išplėstinių įvykių sesijos histogramos taikinį SQL Server Vadybos studija.

(5) porų_matching tikslas

„pair_matching“ tikslas koreliuoja susijusius įvykius, tokius kaip užrakto gavimas ir atrakinimas. Tai leidžia analizuoti suporuotas operacijas ir jų laiko ryšius.

SSMS nustatykite seanso tikslą į pair_matching

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ą Reikšmė, 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 papildomos informacijos, pvz., „database_name“ arba „client_app_name“.
    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 Seansų pradžia ir valdymas

Sukonfigūravę sesiją, galite ją paleisti ir stebėti jos 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 Pradėti sesiją pradėti fiksuoti įvykius.
    Pradėkite išplėstinių įvykių sesiją 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 seanso pavadinimą, ADD EVENT sąlygas kiekvienam įvykiui, ADD TARGET sąlygas saugojimo paskirties vietoms ir pasirenkamas WITH sąlygas seanso konfigūravimui.

5.2 Pagrindinio įvykio seanso kūrimas

Bazinis seansas stebi konkrečius įvykius ir įrašo rezultatus į paskirties vietą. Štai kaip sukurti esminius komponentus.

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

Pradėkite sukurdami 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 taikinių pridėjimas

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

5.3.1 Pridėti tikslinę sintaksę

Pridėkite taikinius naudodami ADD TARGET sąlygą, kai visi įvykiai bus apibrėžti:

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

„package0“ prefiksas nurodo, kad paskirties vieta yra iš bazinio paketo.

5.3.2 Tikslinių parametrų konfigūravimas

Kiekvienas tikslinis tipas priima konkrečius parametrus. event_file atveju 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, skirtą minimaliam atminties naudojimui, ALLOW_MULTIPLE_EVENT_LOSS, skirtą vidutinėms apkrovoms, ir NO_EVENT_LOSS, skirtą visiškam duomenų išsaugojimui, tačiau galimo poveikio našumui kaina.

5.4.2 MAKSIMALUS DISPATCH_LATENCY

Nustatykite maksimalų laiką, kurį įvykiai gali išlikti buferiuose prieš įrašant juos į paskirties vietas:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Mažesnės vertės suteikia daugiau realaus laiko duomenų, tačiau padidina įvesties / išvesties operacijų skaičių.

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 Seansų pradžia, sustabdymas ir keitimas

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

5.5.1 ĮVYKIO SESIJOS KEITIMAS paleidimui/stabdymui

Pradėkite sesiją 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. Išsamus darbas su įvykių taikiniais

6.1 event_file paskirties konfigūracija

„event_file“ paskirties vieta suteikia 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 pateikiami naudojant funkciją 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
);

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

6.2 ring_buffer Tikslinis naudojimas

„ring_buffer“ paskirties vieta saugo įvykius atmintyje, kad būtų galima 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 prarandami, kai sesija sustabdoma arba serveris paleidžiamas iš naujo.

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

„target_data“ yra XML formato įvykių informacija.

6.3 įvykių skaitiklio taikinys

„event_counter“ tikslas leidžia paprastai skaičiuoti be išsamaus duomenų saugojimo:

ADD TARGET package0.event_counter

Šis taikinys seka įvykių dažnį su minimaliomis sąnaudomis, todėl naudingas didelio masto stebėjimui, kai svarbūs tik skaičiai.

6.4 histogramos taikinys

Histogramos tikslinė grupė įvykius suskirsto 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ų atitikimo tikslas

„pair_matching“ tikslas susieja susijusius įvykius, tokius kaip užraktų įsigijimas, su atleidimais:

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_target_read_file funkcija

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šskleiskite duomenis iš ring_buffer taikinių:

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_targets

Peržiūrėti su aktyviais seansais susijusius tikslus:

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 taikinius
  • 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)

Sukurkite tikslinę sesiją, kurioje daugiausia dėmesio būtų skiriama 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 paskirties vietos konfigūravimas įspėjimams

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.

Norint autentifikuoti „Azure Blob Storage“, reikia SAS prieigos rakto, sukonfigūruoto įvykių failo paskirties vietoje. Ryšio eilutės nurodo saugyklos paskyrą ir konteinerį, kuriame saugomi įvykių failai.

10.2 Galimi taikiniai „Azure“ sistemoje

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

  • 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

„event_file“ paskirties vietą reikia sukonfigūruoti naudojant „Azure Blob Storage“ kredencialus:

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 tinkamus taikinius 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 Taikinio parinkimo gairės

Pasirinkite taikinius pagal savo 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
  • Daugeliu atvejų naudokite ALLOW_SINGLE_EVENT_LOSS, kad išlaidos būtų minimalios.
  • 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žfiksavimą, našumo sumažėjimą, failų paskirties problemas ir netikėtą seanso veikimą.

12.2 Seansas neužfiksuoja duomenų

Jei sesija neužfiksuoja numatytų įvykių:

  1. Patikrinkite, ar sesija pradėta naudojant sys.dm_xe_sessions.
  2. Patikrinkite predikatus, kad įsitikintumėte, jog jie neatfiltruoja visų įvykių.
  3. Laikinai pašalindami filtrus, patvirtinkite, kad įvykiai suaktyvinami.
  4. Peržiūrėkite leidimus, kad įsitikintumėte, jog turite prieigą prie sesijos duomenų peržiūros.
  5. Patikrinkite, ar paskirties konfigūracija teisinga ir ar į ją galima įrašyti.
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 renka papildomus 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 Failo paskirties problemos

Failų paskirties problemos dažnai susijusios su leidimais arba disko vieta:

  1. Patikrinkite SQL Server Paslaugos paskyra turi rašymo teises į paskirties 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 sesijoms pradėti / sustabdyti konkrečiais 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:Paketos paleidimas -> sql_batch_paleidimas
  • 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ūrą sudaro įvykiai, veiksmai, predikatai, taikiniai ir seansai, kurie kartu fiksuoja atitinkamą serverio veiklą.

Seansus galima kurti naudojant SSMS arba T-SQL, o tai suteikia lankstumo tiek ad hoc trikčių šalinimui, tiek automatizuotam stebėjimui. Keli taikinių 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
  • Sukurkite sesijų šablonų biblioteką įprastiems stebėjimo scenarijams

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 priemonė, įvykių failų užklausa naudojant sys.fn_xe_file_target_read_file arba žiedinio buferio duomenų užklausa 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 atvejai, kuriuos norite stebėti. Veiksmai papildo užfiksuotus įvykius papildoma informacija. 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.

K: Kokius taikinius turėčiau naudoti pratęstiems įvykiams?

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 pradėta, patikrinkite, ar predikatai nefiltruoja visų įvykių, patvirtinkite paskirties konfigūraciją ir peržiūrėkite teises naudodami sistemos DMV.

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

A: Taip, naudokite SQL Server Agento užduotys, skirtos sesijoms pradėti / sustabdyti, įvykių failams analizuoti, saugojimo politikoms įdiegti 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ų bazės atkūrimas, didelio prieinamumo sprendimaiir našumo optimizavimą. Jo didelė praktinė patirtis apima kelių terabaitų duomenų bazių valdymą, diegimą Visada prieinamumo grupėsir kuriant automatizuotas atsarginių kopijų kūrimo ir atkūrimo strategijas, skirtas kritiškai svarbioms verslo sistemoms.

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ą.

Bendrinti dabar: