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:
- Atviras SQL Server „Management Studio“ ir prisijunkite prie savo SQL Server instancija.
- Objektų naršyklėje išplėskite valdymas -> Išplėstiniai įvykiai.
- Išplėstinių įvykių mazge yra Posėdžiai bei Paketai aplankai, skirti stebėjimo konfigūracijoms tvarkyti.
4.3 Sukurti naują sesiją
Norėdami sukurti naują sesiją:
-
- Dešiniuoju pelės mygtuku spustelėkite ant Posėdžiai aplankas po Išplėstiniai įvykiai.
- pasirinkti Nauja sesija , kad atidarytumėte konfigūracijos dialogą. Tolesniame turinyje šis metodas bus naudojamas naujam seansui sukurti.
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:
- Įveskite sesijos pavadinimą lauke Sesijos pavadinimas laukas. Naudokite aprašomuosius pavadinimus, kurie nurodo stebėjimo tikslą.
- Pasirinktinai pasirinkite Start įvykio sesija serveryje starvamzdis kad įjungtumėte automatinį seanso aktyvavimą.
- Numatytasis sesijos šablonas yra TuščiasGalite naudoti kitus šablonus, jei naudojate iš anksto nustatytą konfigūraciją.
4.3.2 Įvykių puslapio nustatymai
Geriausios Renginiai puslapyje galite pasirinkti, kuriuos įvykius stebėti:
- Pasirinkite Renginiai puslapis iš kairės Pasirinkite puslapį skydelis.
- Lauke Renginių bibliotekarary, naršykite galimus renginius arba naudokite paieškos funkciją.
- Filtruokite įvykius įvesdami raktinius žodžius, pvz., „sql_statement_completed“, kad rastumėte atitinkamus įvykius.
- Pasirinkite norimą įvykį, pvz., sql_statement_completed.
- Spustelėkite rodyklės dešinėn mygtuką, kad perkeltumėte įvykį į Pasirinkti renginiai sąrašas.
4.3.3 Duomenų saugyklos konfigūracija
Geriausios Duomenų saugojimas puslapyje apibrėžiama, kur saugomi įvykių duomenys:
- Pasirinkite Duomenų saugojimas puslapis iš kairės Pasirinkite puslapį skydelis.
- Lauke Targauna sritį, pasirinkite tarišskleidžiamajame meniu gaukite tipą.
(1) įvykių_failas Targauti
Įvykio_failas tar„get“ saugo duomenis disko failuose su plėtiniu .xel:
- pasirinkti įvykių_failas nuo targauti tipo išskleidžiamąjį meniu.
- Nurodykite failo kelią, pvz., C:\temp\YourSession_Targauti.xel.
- Konfigūruokite perkėlimo parinktis, kad valdytumėte disko vietą, nustatydami maksimalų failo dydį ir failų skaičių.
- Geriausios tar„get“ nuolat rašo įvykius, kol sesija sustoja arba pasiekiami saugyklos apribojimai.
(2) žiedinis_buferis Targauti
Žiedinis buferis tar„get“ saugo įvykius atmintyje, kad būtų galima greitai pasiekti juos be disko įvesties/išvesties:
- pasirinkti žiedinis_buferis kaip targauti tipą.
- Konfigūruokite maksimalų buferio atminties paskirstymą.
- Supraskite, kad senesni įvykiai atmetami, kai buferis užsipildo, todėl tai tinka naujausiai veiklai stebėti.
(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.
(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.
(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.
4.3.4 Išplėstiniai nustatymai
Geriausios pažangus puslapyje pateikiamos sesijos lygio konfigūracijos parinktys:
- Pasirinkite pažangus puslapis iš kairės Pasirinkite puslapį skydelis.
- Nustatyti Įvykių saugojimo režimas kontroliuoti, kaip įvykiai tvarkomi esant atminties spaudimui.
- Nustatyti Maksimalus išsiuntimo delsos laikas subalansuoti apdorojimą realiuoju laiku su sistemos našumu.
- Nustatyti Maksimalus atminties dydis bei Maksimalus įvykio dydis atsižvelgiant į jūsų stebėjimo reikalavimus.
- pasirinkti Atminties skaidymo režimas optimizuoti vieno arba kelių procesorių aplinkoms.
4.4 Įvykių filtrų (predikatų) konfigūravimas
Predikatai sumažina duomenų kiekį filtruodami įvykius pagal konkrečius kriterijus. Norėdami konfigūruoti filtrus:
- Dėl Renginiai puslapyje pasirinkite įvykį, kurį norite filtruoti, pvz., „sql_statement_completed“.
- Spauskite Nustatyti , kad atidarytumėte įvykio konfigūracijos dialogo langą.
- Pasirinkite Filtras (Predikatas) skirtukas.
- Lauke Laukas Išskleidžiamajame sąraše pasirinkite lauką, pagal kurį norite filtruoti, pvz., trukmę.
- Pasirinkite a operatorius, pvz., „>“.
- Įveskite filtrą Vertė, pvz., 1000000 (1 sekundė).
- Jei reikia, pridėkite daugiau sąlygų.
4.5 Veiksmų ir įvykių laukų pasirinkimas
Kiekvienam įvykiui galite pasirinkti, kokius duomenis rinkti:
- Dėl Renginiai puslapyje pasirinkite įvykį, kuriam norite pasirinkti duomenis, pvz., „sql_statement_completed“.
- Spauskite Nustatyti , kad atidarytumėte įvykio konfigūracijos dialogo langą.
- Pasirinkite Visuotiniai laukai (veiksmai) skirtukas.
- Pasirinkite veiksmus, kad pridėtumėte papildątary informaciją, pvz., duomenų bazės_pavadinimą arba kliento_programos_pavadinimą.
- Peržiūrėkite Renginių laukai skiltyje, kad pamatytumėte, kurie laukai fiksuojami automatiškai.
- Išvalykite visus nereikalingus laukus, kad sumažintumėte duomenų kiekį.
4.6 Starsesijų planavimas ir valdymas
Sukonfigūravę sesiją, galitetarjį ir stebėkite jo veikimą:
- Spauskite OK sesijai sukurti.
- Objektų naršyklėje išplėskite Posėdžiai aplanką, kad pamatytumėte savo naują sesiją.
- Dešiniuoju pelės mygtuku spustelėkite sesijos pavadinimą ir pasirinkite Start sesija pradėti fiksuoti įvykius.
- Norėdami peržiūrėti tiesioginius duomenis, dešiniuoju pelės mygtuku spustelėkite sesiją ir pasirinkite Tiesioginio stebėjimo duomenys.
- 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:
- Objektų naršyklėje išplėskite valdymas -> Išplėstiniai įvykiai -> Posėdžiai.
- Dešiniuoju pelės mygtuku spustelėkite aktyvų seansą.
- pasirinkti Tiesioginio stebėjimo duomenys , kad atidarytumėte tiesioginių duomenų peržiūros programą.
- Įvykiai tinklelyje rodomi jiems įvykstant.
- Spustelėkite atskirus įvykius, kad išsamios informacijos srityje peržiūrėtumėte išsamias lauko reikšmes.
- 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ą:
- Nustatyti SQL Server Agento užduotis periodiškai pateikti užklausas apie sugadinimo stebėjimo įvykių failą.
- Aptikus sugadinimo įvykių, paveiktoje duomenų bazėje vykdykite komandą DBCC CHECKDB.
- Siųskite el. pašto įspėjimus duomenų bazių administratoriams su įvykių informacija ir DBCC CHECKDB rezultatais.
- 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ų:
- Patikrinkite, ar sesija yra started naudojant sys.dm_xe_sessions.
- Patikrinkite predikatus, kad įsitikintumėte, jog jie neatfiltruoja visų įvykių.
- Įvykių paleidimo pagal tempą patvirtinimasraršvelniai nuimant filtrus.
- Peržiūrėkite leidimus, kad įsitikintumėte, jog turite prieigą prie sesijos duomenų peržiūros.
- 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ų:
- Pridėkite predikatus, kad sumažintumėte įvykių skaičių.
- Pašalinkite nereikalingus veiksmus, kurie kaupia papildustary duomenis.
- Padidinkite MAX_DISPATCH_LATENCY, kad sumažintumėte rašymo dažnį.
- Pakeiskite EVENT_RETENTION_MODE į ALLOW_SINGLE_EVENT_LOSS.
- 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:
- Patikrinkite SQL Server paslaugos paskyra turi rašymo teises targauti katalogą.
- Įsitikinkite, kad diske yra pakankamai vietos.
- Patikrinkite, ar nurodytas kelias egzistuoja ir ar jis pasiekiamas.
- 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į:
- Dialogo lange „Naujas seansas“ spustelėkite mygtuką šablonas išskleidžiamasis.
- Pasirinkite iš galimų šablonų, pvz., „Užklausos detalių stebėjimas“ arba „Sistemos sveikata“.
- 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
- Greita Start: Išplėstiniai įvykiai SQL Server – „Microsoft Learn“
- Išplėstinė įvykių apžvalga – „Microsoft Learn“
- SQL Server Išplėstiniai renginių seansai – „Microsoft Learn“
- Targauna pratęstus renginius SQL Server – „Microsoft Learn“
- SQL Server Išplėstinis įvykių modulis – „Microsoft Learn“
- SQL Server Profileris: išsamus vadovas
- DBCC CHECKDB: išsamus vadovas
- DataNumen SQL Recovery
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ą.

















