1. Ievads
1.1 Kas ir SQL Server Pagarināti pasākumi?
SQL Server Extended Events ir viegla veiktspējas uzraudzības sistēma, kas ļauj administratoriem un izstrādātājiem apkopot un analizēt detalizētus servera aktivitātes datus. Šī sistēma ir integrēta SQL Server Datu bāzes dzinējs un sniedz visaptverošu ieskatu gan parastās darbībās, gan problēmu novēršanas scenārijos.
1.2 Kāpēc monitoringam izmantot paplašinātus notikumus?
SQL Server Paplašinātie notikumi piedāvā vairākas pārliecinošas priekšrocības datubāzes uzraudzībai un problēmu novēršanai:
- Minimāla ietekme uz veiktspēju, pateicoties vieglajai arhitektūrai
- Detalizēta datu vākšanas un notikumu filtrēšanas kontrole
- Pielāgojama datu vākšana, kas pielāgota konkrētām uzraudzības vajadzībām
- Spēja vienlaikus uztvert notikumus no vairākām pakotnēm
- Elastīgas filtrēšanas iespējas, lai koncentrētos uz atbilstošām darbībām
- Atbalsts ražošanas sistēmas uzraudzībai, nepasliktinot lietotāja pieredzi
- Visaptveroša veiktspējas rādītāju izsekošana
- Uzlabota diagnostikaostIC iespējas problēmu novēršanai
- Atbilstības prasību audita liecību uzturēšana
- Reāllaika un vēsturisko datu analīzes iespējas
1.3 Pagarināti notikumi salīdzinājumā ar SQL Server Profils
Kamēr SQL Server Profils Lai gan tas ir bijis tradicionāls uzraudzības rīks, MS SQL Extended Events piedāvā efektīvāku alternatīvu. Extended Events patērē mazāk sistēmas resursu un piedāvā labāku mērogojamību ražošanas vidēm.
SQL Server Profiler tagad ir novecojis, un Microsoft iesaka visām uzraudzības darbībām pāriet uz paplašinātajiem notikumiem.
2. Paplašināto notikumu arhitektūras izpratne
2.1 Paplašināto notikumu dzinēja komponenti
Paplašināto notikumu dzinējs sastāv no vairākiem galvenajiem komponentiem, kas darbojas kopā, lai tvertu, apstrādātu un uzglabātu notikumu datus. Izpratne par šiem komponentiem palīdz izstrādāt efektīvus uzraudzības risinājumus.
- Dispečers: Dispečera komponents koordinē notikumu plūsmu no notikumu avotiem uz paplašināto notikumu programmu. Kad notikums tiek aktivizēts, dispečers saņem paziņojumu un novirza to uz aktīvām sesijām, kas ir abonējušas šo konkrēto notikumu veidu.
- buferis: Buferu tempsrarpirms ierakstīšanas atmiņā saglabājiet notikumu datus tarŠis buferizācijas mehānisms uzlabo veiktspēju, samazinot I/O darbības. Bufera lielumu un pārvaldības iestatījumus var konfigurēt, lai līdzsvarotu atmiņas izmantošanu ar datu uztveršanas prasībām.
- Sesija: Sesija nosaka notikumu uzraudzības darbības jomu. Tā norāda, kuri notikumi jāfiksē, kādas darbības jāizpilda, kurus predikātus jāpiemēro un kur jāglabā rezultāti. Sesijas var izveidot, modificēt,tarted, un apstājās patstāvīgi.
- Tariegūt instanci: Target instances apzīmē tverto notikumu datu glabāšanas vietas. Katra sesija var rakstīt vienā vai vairākās tarsaņem, piemēram, failus, gredzenu buferus vai skaitītājus. Tariegūst procesu un saglabā notikuma informāciju vēlākai analīzei.
2.2 Pasākumu paketes
SQL Server Paplašinātie notikumi sakārto funkcionalitāti pakotnēs. Katrā pakotnē ir ietverti saistīti notikumi, darbības, veidi, predikāti un tarizpaužas. Izplatītākās pakotnes ietver sqlserver, sqlos un package0.
- SQLserver pakotne nodrošina datubāzei specifiskus notikumus, piemēram, vaicājumus un transakcijas.
- SQLOS pakotnē ir operētājsistēmas notikumi.
- Pakotne “package0” piedāvā vispārējas nozīmes funkcionalitāti, kas tiek izmantota visās pakotnēs.
2.3 Notikumu veidi un lauki
Notikumi atspoguļo notikumus ietvaros SQL Server kuru vēlaties uzraudzīt. Katram notikuma veidam ir iepriekš definēti lauki, kas ietver atbilstošu informāciju. Piemēram, notikums sql_statement_completed ietver laukus ilgumam, centrālā procesora laikam, lasīšanai un rakstīšanai.
Notikumi var būt sinhroni vai asinhroni. Sinhronie notikumi tiek aktivizēti pašas darbības laikā, savukārt asinhronie notikumi tiek aktivizēti pēc tās pabeigšanas. Notikumu raksturlielumu izpratne palīdz izvēlēties atbilstošus notikumus jūsu uzraudzības vajadzībām.
2.4 akcijas
Darbības pievieno papildinājumutary informāciju uztvertajiem notikumiem. Kad notikums aktivizējas, tiek veiktas saistītās darbības, lai apkopotu papildu kontekstu, piemēram, SQL tekstu, sesijas ID vai izsaukumu steka informāciju.
Bieži sastopamas darbības ietver sql_text vaicājuma paziņojumu tveršanai, database_name datubāzes identificēšanai un client_h.ostnosaukums, lai izsekotu izcelsmes serveri. Darbības sniedz būtisku kontekstu problēmu novēršanai un analīzei.
2.5 Tarizpaužas
Tarnosaka, kā un kur tiek glabāti notikumu dati. SQL Server Paplašinātie notikumi atbalsta vairākus tariegūt veidus, tostarp:
- event_file diska glabāšanai, nodrošinot pastāvīgu krātuvi detalizētai analīzei
- ring_buffer atmiņā balstītai saglabāšanai, piedāvājot ātru piekļuvi nesenajiem notikumiem ar minimālu pieskaitāmo resursu apjomu.
- event_counter vienkāršai skaitīšanai
- histogramma grupēšanai
- pair_matching saistītu notikumu korelācijai
2.6 Predikāti (filtri)
Predikāti filtrē notikumus, pamatojoties uz norādītajiem nosacījumiem, samazinot uztverto datu apjomu. Varat filtrēt pēc datubāzes nosaukuma, lietojumprogrammas nosaukuma, sesijas ID, ilguma sliekšņiem vai jebkuras notikuma lauka vērtības.
Efektīva predikātu izmantošana samazina ietekmi uz veiktspēju, fiksējot tikai atbilstošos notikumus. Sarežģīti predikāti apvieno vairākus nosacījumus, izmantojot loģiskos operatorus, lai izveidotu precīzus filtrēšanas kritērijus.
3. Paplašināti notikumu sesijas stāvokļi un dzīves cikls
3.1 Sesijas stāvokļi: CREATE, ALTER un DROP
Paplašināto notikumu sesijas norit cauri atšķirīgiem stāvokļiem:
- CREATE EVENT SESSION priekšraksts definē jaunu sesiju, bet netarSesija atrodas apturētā stāvoklī, līdz tā tiek skaidri aktivizēta.
- ALTER EVENT SESSION priekšraksts maina sesijas konfigurāciju vai maina tās stāvokli starp stopped un s.tartē.
- DROP EVENT SESSION priekšraksts pilnībā noņem sesijas definīciju no servera.
3.2 Sesijas saturs un raksturojums
Katrā sesijā ir notikumu, darbību kopums, tariegūst un predikātus. Sesijām ir netiešas robežas, kas nosaka to darbības jomu un uzvedību. Konfigurācijas opcijas kontrolē atmiņas piešķiršanu, notikumu saglabāšanu un nosūtīšanas latentumu.
Sesijas raksturlielumi ietver to, vai tās saglabājas dažādos serveros.tarts, maksimālā atmiņas piešķiršana un tas, kā tie apstrādā atmiņas slodzi. Šie iestatījumi būtiski ietekmē sesijas darbību un resursu patēriņu.
3.3 Sesijas robežas un pakotnes
Sesijas robežas nosaka attiecības starp notikumiem, tarsaņem un pakotnes. Notikumi no vienas pakotnes var izraisīt darbības no citas pakotnes, nodrošinot datu vākšanas stratēģiju elastību.
Pakotņu relācijas ļauj apvienot notikumus no vairākiem avotiem vienā sesijā. Šī iespēja nodrošina visaptverošus uzraudzības scenārijus, kas aptver dažādus SQL Server apakšsistēmas.
4. Paplašinātu notikumu sesiju izveide, izmantojot SSMS
4.1 Priekšnosacījumi un iestatīšana
Pirms izveidošanas SQL Server Paplašinātām notikumu sesijām pārliecinieties, vai jums ir atbilstošas atļaujas. Servera darbības jomas sesijām ir nepieciešama atļauja MAINĪT JEBKURU NOTIKUMU SESIJAS vai datubāzes darbības jomas sesijām — KONTROLES atļauja datubāzē.
Pārbaudiet to SQL Server Management Studio ir instalēta un savienota ar jūsu tariegūt instanci. Iepazīstieties ar uzraudzības prasībām un nosakiet, kuri notikumi un tarvislabāk atbilst jūsu vajadzībām.
4.2 Piekļuve paplašinātajiem notikumiem objektu pārlūkā
Lai piekļūtu paplašināto notikumu saskarnei SSMS, veiciet tālāk norādītās darbības.
- atvērts SQL Server Management Studio un izveidojiet savienojumu ar savu SQL Server piemērs
- Objektu pārlūkā izvērsiet vadība -> Paplašināti notikumi.
- Paplašināto notikumu mezgls satur Sessions un Paketes mapes uzraudzības konfigurāciju pārvaldībai.
4.3 Jaunas sesijas izveide
Lai izveidotu jaunu sesiju:
-
- Ar peles labo pogu noklikšķiniet uz Sessions mape zem Paplašināti notikumi.
- Izvēlēties Jauna sesija lai atvērtu konfigurācijas dialoglodziņu. Šajā saturā šī metode tiks izmantota jaunas sesijas izveidei.
Piezīme: Jaunas sesijas vednis ir pieejams arī gida pavadībā.
4.3.1 Vispārīgā lapas konfigurācija
Gada vispārējs lapā konfigurējiet sesijas pamata īpašības:
- Ievadiet sesijas nosaukumu laukā Sesijas nosaukums lauks. Izmantojiet aprakstošus nosaukumus, kas norāda uzraudzības mērķi.
- Pēc izvēles atlasiet Start notikuma sesija serverī starcaurule lai iespējotu automātisku sesijas aktivizēšanu.
- Noklusējuma sesijas veidne ir TukšsVarat izmantot citas veidnes, ja izmantojat iepriekš definētu konfigurāciju.
4.3.2 Notikumu lapas iestatīšana
The Pasākumi lapa ļauj atlasīt, kurus notikumus uzraudzīt:
- Izvēlieties Pasākumi lapa no kreisās puses Atlasiet lapu panelis.
- Iekš Pasākumu bibliotēkarary, pārlūkojiet pieejamos pasākumus vai izmantojiet meklēšanas funkciju.
- Filtrējiet notikumus, ierakstot atslēgvārdus, piemēram, “sql_statement_completed”, lai atrastu atbilstošus notikumus.
- Atlasiet vēlamo notikumu, piemēram, sql_statement_completed.
- Noklikšķiniet uz labās bultiņas pogas, lai pārvietotu notikumu uz Atlasītie notikumi sarakstu.
4.3.3 Datu glabāšanas konfigurācija
The Data Storage lapa nosaka, kur tiek glabāti notikumu dati:
- Izvēlieties Data Storage lapa no kreisās puses Atlasiet lapu panelis.
- Iekš Tarizpaužas apgabalu, izvēlieties tariegūt tipu no nolaižamās izvēlnes.
(1) notikumu_fails Tarsaņemt
Notikuma_fails target saglabā datus diska failos ar paplašinājumu .xel:
- Izvēlēties notikuma_fails no tariegūt tipa nolaižamo izvēlni.
- Norādiet faila ceļu, piemēram, C:\temp\YourSession_Target.xel.
- Konfigurējiet apgāšanās opcijas, lai pārvaldītu diska vietu, iestatot maksimālo faila lielumu un failu skaitu.
- The target ieraksta notikumus nepārtraukti, līdz sesija apstājas vai tiek sasniegti krātuves ierobežojumi.
(2) gredzenveida buferis Tarsaņemt
Gredzenveida buferis tariegūt saglabā notikumus atmiņā, lai nodrošinātu ātru piekļuvi bez diska ievades/izvades:
- Izvēlēties gredzenveida buferis jo tariegūt tipu.
- Konfigurējiet maksimālo atmiņas piešķiršanu buferim.
- Saprotiet, ka vecāki notikumi tiek atmesti, kad buferis piepildās, padarot to piemērotu neseno darbību uzraudzībai.
(3) notikumu_skaitītājs Tarsaņemt
Notikumu skaitītājs target vienkārši skaita notikumu rašanās gadījumus, neuzglabājot detalizētus datus. Tas nodrošina minimālas papildu izmaksas, ja nepieciešama tikai informācija par biežumu.
(4) histogramma Tarsaņemt
Histogramma tar`get` grupē notikumus pēc norādītās lauka vērtības, izveidojot sadalījuma statistiku. Tas ir noderīgi, lai identificētu bieži sastopamus modeļus vai augstas frekvences vērtības.
(5) pāru_saskaņošana Tarsaņemt
Pāru saskaņošana tariegūt korelētus saistītus notikumus, piemēram, slēdzenes iegūšanu un atlaišanu. Tas ļauj analizēt pāra darbības un to laika attiecības.
4.3.4 Paplašinātie iestatījumi
The uzlabots lapā ir pieejamas sesijas līmeņa konfigurācijas opcijas:
- Izvēlieties uzlabots lapa no kreisās puses Atlasiet lapu panelis.
- Konfigurēt Notikumu saglabāšanas režīms lai kontrolētu, kā notikumi tiek apstrādāti atmiņas spiediena apstākļos.
- Noteikt Maksimālā nosūtīšanas latentuma lai līdzsvarotu reāllaika apstrādi ar sistēmas veiktspēju.
- Konfigurēt Maksimālais atmiņas apjoms un Maksimālais pasākuma lielums pamatojoties uz jūsu uzraudzības prasībām.
- Izvēlēties Atmiņas nodalījuma režīms lai optimizētu viena vai vairāku procesoru vidēm.
4.4 Notikumu filtru (predikātu) konfigurēšana
Predikāti samazina datu apjomu, filtrējot notikumus, pamatojoties uz konkrētiem kritērijiem. Lai konfigurētu filtrus:
- Gada Pasākumi lapā atlasiet notikumu, kuru vēlaties filtrēt, piemēram, “sql_statement_completed”.
- Noklikšķiniet Konfigurēt , lai atvērtu notikuma konfigurācijas dialoglodziņu.
- Izvēlieties Filtrs (Predikāts) Tab.
- Iekš Lauks Nolaižamajā izvēlnē izvēlieties lauku, pēc kura filtrēt, piemēram, ilgumu.
- Izvēlieties a operators, piemēram, “>”.
- Ievadiet filtru Vērtība, piemēram, 1000000 (1 sekunde).
- Ja nepieciešams, pievienojiet vēl citus nosacījumus.
4.5 Darbību un notikumu lauku atlasīšana
Katram notikumam varat atlasīt apkopojamo datu kopu:
- Gada Pasākumi lapā atlasiet notikumu, kuram vēlaties atlasīt datus, piemēram, “sql_statement_completed”.
- Noklikšķiniet Konfigurēt , lai atvērtu notikuma konfigurācijas dialoglodziņu.
- Izvēlieties Globālie lauki (darbības) Tab.
- Atlasiet darbības, lai pievienotu papildinājumutary informāciju, piemēram, database_name vai client_app_name.
- Pārskatiet Notikumu lauki sadaļu, lai redzētu, kuri lauki tiek automātiski ierakstīti.
- Notīriet visus nevajadzīgos laukus, lai samazinātu datu apjomu.
4.6 Starsesiju veidošana un pārvaldība
Pēc sesijas konfigurēšanas varat starto un uzraugiet tā darbību:
- Noklikšķiniet OK lai izveidotu sesiju.
- Objektu pārlūkā izvērsiet Sessions mapi, lai skatītu savu jauno sesiju.
- Ar peles labo pogu noklikšķiniet uz sesijas nosaukuma un atlasiet Start sesija lai sāktu fiksēt notikumus.
- Lai skatītu tiešraides datus, ar peles labo pogu noklikšķiniet uz sesijas un atlasiet Tiešraides dati.
- Apturiet sesiju, ar peles labo pogu noklikšķinot un atlasot Apturēt sesiju.
5. Paplašinātu notikumu sesiju izveide, izmantojot T-SQL
5.1 NOTIKUMA IZVEIDES SESIJAS sintakse
Paplašinātu notikumu sesiju izveide, izmantojot T-SQL, nodrošina precīzu kontroli un iespējo skriptēšanu automatizētai izvietošanai. Priekšraksts CREATE EVENT SESSION ievēro noteiktu sintakses struktūru.
Pamata sintakse ietver sesijas nosaukumu, ADD EVENT klauzulas katram notikumam, ADD TARGET klauzulas krātuves galamērķiem un papildu WITH klauzulas sesijas konfigurēšanai.
5.2 Pamata notikuma sesijas izveide
Pamata sesija uzrauga konkrētus notikumus un ieraksta rezultātus tardabūt. Lūk, kā izveidot svarīgākās sastāvdaļas.
5.2.1 Sesijas nosaukuma un opciju definēšana
Starizveidojot sesiju ar aprakstošu nosaukumu:
CREATE EVENT SESSION [SampleSession] ON SERVER
Klauzula ON SERVER izveido servera tvēruma sesiju, kas saglabājas arī pēc datubāzes izmaiņām. Azure SQL datubāzes gadījumā datubāzes tvēruma sesijām izmantojiet klauzulu ON DATABASE.
5.2.2 Notikumu pievienošana, izmantojot ADD EVENT
Pievienojiet notikumus, kas jātver, izmantojot klauzulu ADD EVENT:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Tas ietver visus pabeigtos SQL priekšrakstus. Varat pievienot vairākus notikumus, iekļaujot papildu ADD EVENT klauzulas.
5.2.3 Notikumu darbību konfigurēšana
Darbības apkopo papildu kontekstu katram notikumam. Pievienojiet darbības iekavās aiz notikuma nosaukuma:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Šajā piemērā ir ietverts katra pabeigtā priekšraksta SQL teksts, datubāzes nosaukums un lietotājvārds.
5.2.4 Notikumu predikātu iestatīšana (WHERE klauzula)
Predikāti filtrē notikumus, lai samazinātu datu apjomu. Izmantojiet WHERE klauzulu notikuma definīcijā:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Tas filtrē paziņojumus, kuru ilgums pārsniedz 5 sekundes (5 000 000 mikrosekundes).
5.3 Notikuma pievienošana Tarizpaužas
Tarnosaka, kur tiek glabāti notikumu dati un kā tie tiek apstrādāti.
5.3.1. PIEVIENOT TARGET sintakse
Pievienot tarsāk lietot ADD TARGET klauzula pēc visu notikumu definēšanas:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Prefikss package0 norāda target nāk no bāzes pakotnes.
5.3.2 Konfigurēšana Tariegūt parametrus
Katrs target tips pieņem noteiktus parametrus. event_file konfigurējiet filename, max_file_size un max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Šī konfigurācija izveido failus līdz 50 MB lielumā, saglabājot līdz 5 failiem, veicot pārnešanu.
5.4 Sesijas opcijas un iestatījumi
WITH klauzula konfigurē sesijas līmeņa opcijas, kas kontrolē darbību un resursu izmantošanu.
5.4.1 MAX_MEMORY un EVENT_RETENTION_MODE
Kontrolējiet atmiņas piešķiršanu un notikumu apstrādi spiediena apstākļos:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
EVENT_RETENTION_MODE opcijas ietver ALLOW_SINGLE_EVENT_LOSS minimālai atmiņas izmantošanai, ALLOW_MULTIPLE_EVENT_LOSS mērenai papildu slodzei un NO_EVENT_LOSS pilnīgai datu saglabāšanai c.ost par iespējamo ietekmi uz sniegumu.
5.4.2 MAKSIMĀLAIS DISPATCH_LATENCY
Iestatiet maksimālo laiku, cik ilgi notikumi var palikt buferos pirms to ierakstīšanas tariegūst:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Zemākas vērtības nodrošina vairāk reāllaika datu cost palielinātām I/O operācijām.
5.4.3 ATMIŅAS_NODALĪJUMA_REŽĪMS
Optimizējiet atmiņas sadalīšanu atbilstoši aparatūras konfigurācijai:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Iespējas ietver NONE vienai nodalījumai, PER_NODE NUMA sistēmām un PER_CPU maksimālai vienlaicībai vairāku procesoru sistēmās.
5.5 Starsesiju apturēšana, apturēšana un mainīšana
Pārvaldiet sesijas stāvokli un konfigurāciju, izmantojot ALTER EVENT SESSION priekšrakstus.
5.5.1 NOTIKUMU SESIJAS MAINĪŠANA Start/Apstāties
Starsesija pēc izveides:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Apturēt skriešanas sesiju:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Esošo sesiju modificēšana
Apturētas sesijas konfigurācijas modificēšana. Notikumu pievienošana:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Noņemt notikumus:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Notikumu sesiju atmešana
Pilnībā noņemt sesiju, izmantojot DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Pirms nomešanas sesija ir jāpārtrauc.
6. Darbs ar notikumu Tariedziļinās detaļās
6.1 notikuma_fails Tariegūt konfigurāciju
Notikuma_fails target nodrošina pastāvīgu notikumu datu krātuvi ar elastīgām konfigurācijas iespējām.
6.1.1 Faila ceļš un nosaukumu piešķiršanas konvencijas
Norādiet notikumu failu pilnu ceļu un faila nosaukumu:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Paplašinātajiem notikumu žurnāla failiem izmantojiet paplašinājumu .xel. Pārliecinieties, vai SQL Server Pakalpojuma kontam ir rakstīšanas atļaujas norādītajā direktorijā.
6.1.2 Failu pārnešana un lieluma pārvaldība
Konfigurējiet automātisku failu pārsūtīšanu, lai pārvaldītu diska vietu:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Kad faila lielums sasniedz 50 MB, SQL Server Paplašinātie notikumi izveido jaunu failu ar palielinātu sufiksu. Sasniedzot 10 failus, vecākais fails tiek pārrakstīts.
6.1.3 Notikumu faila datu lasīšana
Veikt notikumu faila datu vaicājumu, izmantojot 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
);
Aizstājējzīmju modelis nolasa visus ar sesiju saistītos failus.
6.2 gredzenveida buferis Tariegūt lietojumu
Gredzenveida buferis tarsaglabāt notikumus atmiņā, lai ātri piekļūtu nesenajām darbībām.
6.2.1 Atmiņā balstīta notikumu glabāšana
Konfigurējiet ring_buffer atmiņā balstītai krātuvei:
ADD TARGET package0.ring_buffer
Notikumi paliek pieejami tikai sesijas laikā un SQL Server darbojas. Dati ir lost kad sesija apstājas vai serveris atgriežastarts.
6.2.2 Bufera izmērs un konfigurācija
Zvana bufera atmiņas piešķiršanas kontrole:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Norādiet atmiņas apjomu KB. Kad buferis piepildās, vecāki notikumi tiek atmesti, izmantojot FIFO pieeju.
6.2.3 Gredzena bufera datu vaicāšana
Piekļūstiet gredzenveida bufera datiem, izmantojot 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';
The target_data satur XML formātā formatētu notikumu informāciju.
6.3 notikumu_skaitītājs Tarsaņemt
Notikumu skaitītājs target nodrošina vienkāršu skaitīšanu bez detalizētas datu glabāšanas:
ADD TARGET package0.event_counter
šis tarIegūstiet notikumu biežuma izsekošanas iespējas ar minimālām papildu izmaksām, kas ir noderīgi liela apjoma uzraudzībai, kur svarīgs ir tikai skaits.
6.4 histogramma Tarsaņemt
Histogramma tariegūt grupu notikumus pēc lauka vērtībām:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Šī konfigurācija izveido histogrammu, kurā parādīts notikumu sadalījums datubāzēs.
6.5 pāru_saskaņošana Tarsaņemt
Pāru saskaņošana tariegūt korelācijas ar saistītiem notikumiem, piemēram, slēdzeņu iegādi, ar atbrīvošanu:
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'
)
Tas ļauj analizēt pāra darbības un to ilgumu.
7. Paplašinātu notikumu datu skatīšana un analīze
7.1 SSMS izmantošana tiešraides datu skatīšanai
SQL Server Management Studio nodrošina grafisku saskarni paplašināto notikumu datu skatīšanai reāllaikā:
- Objektu pārlūkā izvērsiet vadība -> Paplašināti notikumi -> Sessions.
- Ar peles labo pogu noklikšķiniet uz aktīvās sesijas.
- Izvēlēties Tiešraides dati , lai atvērtu tiešraides datu skatītāju.
- Notikumi režģī tiek parādīti, tiklīdz tie notiek.
- Noklikšķiniet uz atsevišķiem notikumiem, lai detalizētās informācijas rūtī skatītu detalizētas lauku vērtības.
- Izmantojiet rīkjoslas filtrus, lai koncentrētos uz konkrētiem notikumu veidiem vai lauku vērtībām.
7.2 Notikumu failu datu vaicāšana, izmantojot T-SQL
T-SQL vaicājumi nodrošina elastīgu uztverto notikumu datu analīzi.
7.2.1 sys.fn_xe_file_tarFunkcija get_read_file
Lasīt notikumu faila datus, izmantojot šo sistēmas funkciju:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Funkcija atgriež vienu rindu katram notikumam ar XML formātā formatētu informāciju.
7.2.2 XML notikumu datu parsēšana
Izvilkt konkrētas vērtības no XML notikumu datiem:
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 izteiksmes no XML struktūras izvelk atsevišķas lauku vērtības.
7.2.3 Notikumu datu konvertēšana tabulās
Izveidojiet strukturētus rezultātu kopumus no notikumu datiem:
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 Gredzena bufera datu vaicāšana
Izvilkt datus no ring_buffer tariegūst:
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 Sistēmas skati paplašinātiem notikumiem
SQL Server nodrošina vairākus DMV un kataloga skatus paplašināto notikumu sesiju pārvaldībai un uzraudzībai.
7.4.1 sys.server_event_sessions
Skatīt serverī saglabātās sesijas definīcijas:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Šajā kataloga skatā ir redzama visu definēto sesiju konfigurācijas informācija.
7.4.2 sys.dm_xe_sessions
Skatīt pašlaik aktīvās sesijas:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Šis DMV sniedz izpildlaika informāciju par aktīvām paplašināto notikumu sesijām.
7.4.3 sys.dm_xe_session_tarizpaužas
Uzzināt tartiek saistīts ar aktīvām sesijām:
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 Citi noderīgi DMV
Papildu skati sniedz visaptverošu informāciju par sesiju:
- sys.dm_xe_session_events: Uzskaita notikumus aktīvajās sesijās
- sys.dm_xe_session_event_actions: Parāda sesijas notikumiem konfigurētās darbības
- sys.dm_xe_objects: Katalogizē visus pieejamos notikumus, darbības un tarizpaužas
- sys.dm_xe_object_columns: Detalizētas informācijas lauki, kas pieejami katram notikuma tipam
- sys.dm_xe_packages: Uzskaita visas paplašinātās notikumu pakotnes
8. Praktiski lietošanas gadījumi un piemēri
8.1 SQL priekšraksta izpildes uzraudzība
SQL priekšrakstu izpildes izsekošana sniedz ieskatu vaicājumu modeļos un veiktspējas raksturlielumos.
8.1.1 sql_statement_completed notikumu izsekošana
Izveidojiet sesiju, lai uzraudzītu pabeigtos SQL paziņojumus:
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 Filtrēšana pēc datubāzes vai lietojumprogrammas
Koncentrējieties uz konkrētām datubāzēm vai lietojumprogrammām, izmantojot predikātus:
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 Strupceļa informācijas iegūšana
Strupceļa analīzei ir nepieciešama detalizētas informācijas iegūšana par konfliktējošiem darījumiem.
8.2.1 xml_deadlock_report notikums
Izveidojiet sesiju, lai tvertu pilnīgus strupceļu 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 Strupceļu grafiku analīze
Iegūt un analizēt informāciju par strupceļu:
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';
Strupceļa grafikā ir ietverta informācija par procesiem, resursiem un upuru atlasi.
8.3 Vaicājumu veiktspējas problēmu izsekošana
Identificējiet slikti funkcionējošus vaicājumus, izmantojot ilguma un resursu patēriņa rādītājus.
8.3.1 Ilgstošu vaicājumu noteikšana
Tvert vaicājumus, kas pārsniedz noteiktus ilguma sliekšņus:
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 Izpildes plāna analīze
Veiktspējas analīzes vaicājumu plānu uztveršana:
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 Pieteikšanās un drošības notikumu uzraudzība
Izsekojiet autentifikācijas un autorizācijas darbības drošības audita veikšanai.
8.4.1 Pieteikšanās veiksmes un neveiksmju izsekošana
Uzraugiet gan veiksmīgus, gan neveiksmīgus pieteikšanās mēģinājumus:
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 Atļauju izmaiņas
Drošības atļauju izmaiņu izsekošana:
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 Datu bāzes līmeņa uzraudzība
Uzraudzīt datubāzei specifiskas darbības un stāvokļa izmaiņas.
8.5.1 Dublēšanas un atjaunošanas notikumi
Izsekojiet dublēšanas un atjaunošanas darbības:
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 Datu bāzes stāvokļa izmaiņas
Datu bāzes stāvokļa pāreju uzraudzība:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Datu bāzes bojājumu un integritātes problēmu noteikšana
SQL Server Paplašinātie notikumi nodrošina agrīnās brīdināšanas iespējas potenciālu datubāzes bojājumu noteikšanai, ļaujot proaktīvi iejaukties, pirms problēmas saasinās.
8.6.1 Galvenie notikumi korupcijas atklāšanai
Vairāki notikumi signalizē par iespējamu bojājumu vai I/O problēmām.
8.6.1.1 error_reported notikums kritiskām kļūdām
Notikums error_reported ietver visu SQL Server kļūdas, tostarp ar korupciju saistīto kļūdu skaitļi:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Kļūda 823 norāda uz I/O kļūdām, kļūda 824 signalizē par loģiskās konsekvences kļūdām, un kļūda 825 ziņo par lasīšanas atkārtotas mēģinājuma panākumiem, kas var norādīt uz aparatūras problēmām.
8.6.1.2 database_uspect_data_page notikums
Šis notikums tiek aktivizēts, kad SQL Server sastopas ar aizdomīgu lapu:
ADD EVENT sqlserver.database_suspect_data_page
Aizdomīgas lapas norāda uz iespējamu bojājumu un tiek reģistrētas tabulā msdb.dbo.suspect_pages.
8.6.1.3 errorlog_written Notikums
Tveriet ierakstus, kas ierakstīti SQL Server kļūdu žurnāls:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Korupcijas uzraudzības sesijas izveide
Izveidot visaptverošu sesiju korupcijas atklāšanai un uzraudzībai.
8.6.2.1 Bojājumu kļūdu numuru filtrēšana (823, 824, 825)
Izveidot tarsesija, kurā uzmanība pievērsta korupcijas rādītājiem:
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 Atbilstošu smaguma līmeņu iestatīšana
Iekļaujiet nopietnas kļūdas, kas var liecināt par korupciju:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
20. un augstāka nopietnības pakāpe norāda uz sistēmas līmeņa problēmām, kas bieži vien ir saistītas ar korupciju.
8.6.2.3 Notikumu faila konfigurēšana Tarsaņemt brīdinājumus
Saglabājiet korupcijas notikumus analīzei un brīdināšanai:
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 Korupcijas notikumu datu analīze
No iegūtajiem datiem iegūt un interpretēt ar korupciju saistītus notikumus.
8.6.3.1 Aizdomīgu lapu identificēšana
Vaicājums par database_suspect_data_page notikumiem:
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 Kļūdas informācijas un konteksta iegūšana
Analizējiet error_reported notikumus, lai noteiktu korupcijas modeļus:
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 Integrācija ar DBCC CHECKDB
Izmantojiet paplašināto notikumu datus kā vadlīnijas DBCC PĀRBAUDE izpilde.
8.6.4.1 DBCC CHECKDB aktivizēšana, pamatojoties uz notikumiem
Kad tiek konstatēti bojājuma gadījumi, izpildiet DBCC CHECKDB, lai veiktu visaptverošu validāciju:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Paplašinātie notikumi nodrošina agrīno brīdinājumu, savukārt DBCC CHECKDB veic rūpīgu validāciju.
8.6.4.2 Automatizētas korupcijas apkarošanas darbplūsmas
Ieviesiet automatizētas atbildes, uzraugot notikumu failu:
- Konfigurēt SQL Server Aģenta uzdevums periodiski veikt vaicājumus korupcijas uzraudzības notikumu failā.
- Kad tiek atrasti bojājuma notikumi, attiecīgajā datubāzē izpildīt komandu DBCC CHECKDB.
- Sūtīt e-pasta brīdinājumus datubāzes administratoriem ar notikumu informāciju un DBCC CHECKDB rezultātiem.
- Reģistrējiet atradumus centralizētā uzraudzības tabulā tendenču analīzei.
8.6.4.3 Proaktīvās uzraudzības līdzsvarošana ar veiktspēju
Paplašinātie notikumi piedāvā zemu papildu slodzi bojājumu noteikšanā, salīdzinot ar biežu DBCC CHECKDB izpildi:
- Nepārtraukti palaist paplašinātos notikumus, lai reāllaikā noteiktu bojājumus
- Izpildīt DBCC CHECKDB tikai tad, ja parādās bojājuma indikatori.
- Regulāras DBCC CHECKDB ieplānošana apkopes periodos
- Izmantojiet paplašinātos notikumus, lai noteiktu, kurām datubāzēm nepieciešama tūlītēja uzmanība
Šī pieeja nodrošina proaktīvu uzraudzību bez ievērojama resursu patēriņa, kas saistīts ar pastāvīgām integritātes pārbaudēm.
8.6.4.4 Bojātas datubāzes labošana
Ja datubāzē tiek konstatēti bojājumi, nelielu bojājumu novēršanai varat izmantot DBCC CHECKDB. Ja tas neizdodas, varat izmēģināt trešās puses pakalpojumu. SQL datubāzes atkopšanas rīks, kas parasti piedāvā augstāku atkopšanas līmeni nopietni bojātām datubāzēm.
9. Servera tvēruma un datubāzes tvēruma paplašinātie notikumi
9.1 Servera tvēruma notikumu sesijas
Servera tvēruma sesijas uzrauga aktivitātes visā SQL Server instance. Šīs sesijas tiek izveidotas ar ON SERVER klauzulu un tiek saglabātas galvenajā datubāzē.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Servera tvēruma sesijas uztver notikumus no visām datubāzēm un ir piemērotas uzraudzībai instances līmenī.
9.2 Datubāzes tvēruma notikumu sesijas (Azure SQL datu bāze)
Datu bāzes tvēruma sesijas ir ierobežotas ar vienu datu bāzi un galvenokārt tiek izmantotas Azure SQL datu bāzē, kur servera līmeņa piekļuve ir ierobežota:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
Azure SQL datubāzē notikumu faili tiek glabāti Azure Blob krātuvē, nevis lokālajās failu sistēmās.
9.3 Atšķirības un lietošanas gadījumi
Servera tvēruma sesijas nodrošina visaptverošu uzraudzību visās datubāzēs, taču tām ir nepieciešamas paaugstinātas atļaujas. Datubāzes tvēruma sesijas piedāvā izolāciju un ir piemērotas konkrētu lietojumprogrammu vai nomnieku uzraudzībai.
Izmantojiet servera tvēruma sesijas centralizētai uzraudzībai, veiktspējas problēmu novēršanai vairākās datubāzēs un drošības auditam. Izmantojiet datubāzes tvēruma sesijas Azure SQL datubāzē, vairāku nomnieku vidēs vai deleģējot uzraudzības pienākumus lietojumprogrammu komandām.
10. Paplašinātie notikumi Azure SQL datubāzē
10.1 Azure specifiski apsvērumi
Azure SQL datubāze ievieš paplašinātos notikumus ar dažām atšķirībām no lokālās versijas SQL ServerSesijas pēc noklusējuma ir datubāzes tvērumā, un notikumu failu glabāšanai tiek izmantota Azure Blob Storage, nevis lokālās failu sistēmas.
Autentifikācijai Azure Blob Storage ir nepieciešams SAS marķieris, kas konfigurēts notikuma failā. tarSavienojuma virknes atsaucas uz krātuves kontu un konteineru, kurā tiek glabāti notikumu faili.
10.2 Pieejams Tarnokļūst Azure
Azure SQL datu bāze atbalsta šos paplašinātos notikumus tariegūst:
- event_file: Raksta Azure Blob krātuvē
- ring_buffer: Uz atmiņu balstīta krātuve ar tādu pašu darbību kā lokālajā vidē
- event_counter: Skaita notikumu rašanās gadījumus
Notikuma_fails tariegūšanai nepieciešama konfigurācija ar Azure Blob Storage akreditācijas datiem:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Datubāzes tvēruma sesiju izveide
Izveidojiet sesiju Azure SQL datubāzē:
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;
Datubāzes tvēruma sesijas pakalpojumā Azure darbojas līdzīgi servera tvēruma sesijām lokāli, bet ar tvērumu, kas ierobežots ar pašreizējo datubāzi.
11. Labākā prakse un veiktspējas optimizācija
11.1 Veiktspējas ietekmes samazināšana līdz minimumam
Paplašinātie notikumi ir paredzēti minimālām papildu izmaksām, taču nepareiza konfigurācija var ietekmēt veiktspēju. Ievērojiet šīs vadlīnijas:
- Izmantojiet konkrētus predikātus, lai filtrētu notikumus, nevis tvertu visu
- Izvairieties no nevajadzīgu darbību apkopošanas, kas palielina apstrādes izmaksas
- Izvēlieties atbilstošu tartiek iegūts, pamatojoties uz datu saglabāšanas vajadzībām
- Iestatiet saprātīgus bufera izmērus un nosūtīšanas latentumus
- Sesijas resursu patēriņa uzraudzība, izmantojot DMV
11.2 Pareizo notikumu un filtru izvēle
Atlasiet notikumus, kas tieši atbilst jūsu uzraudzības mērķiem. Izvairieties no biežiem notikumiem, ja vien tas nav nepieciešams, un vienmēr lietojiet predikātus, lai samazinātu datu apjomu.
Piemēram, visu sql_statement_completed notikumu tveršanas vietā filtrējiet pēc konkrētām datubāzēm vai ilguma sliekšņiem:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Tarsaņemt atlases vadlīnijas
izvēlēties tariegūst, pamatojoties uz jūsu analīzes prasībām:
- Detalizētai vēsturiskajai analīzei un ilgtermiņa saglabāšanai izmantojiet event_file
- Izmantojiet ring_buffer reāllaika uzraudzībai ar minimālu ietekmi uz ievadi/izvadi
- Izmantojiet event_counter, ja svarīga ir tikai frekvence
- Izmantojiet histogrammu sadalījuma analīzei
- Korelētu notikumu analīzei izmantojiet pair_matching
11.4 Sesijas konfigurācijas ieteikumi
Konfigurējiet sesijas ar atbilstošiem resursu ierobežojumiem:
- Iestatiet MAX_MEMORY, pamatojoties uz paredzamo notikumu apjomu un servera resursiem
- Minimālām virsizdevumiem metros izmantojiet ALLOW_SINGLE_EVENT_LOSSost scenāriji
- Iestatiet MAX_DISPATCH_LATENCY, lai līdzsvarotu reāllaika vajadzības ar veiktspēju
- Izmantojiet PER_CPU atmiņas sadalīšanu vairāku procesoru sistēmās
- Izvairieties no STARTUP_STATE=ON, ja vien nav nepieciešama nepārtraukta uzraudzība
11.5 Notikumu faila lieluma un saglabāšanas pārvaldība
Konfigurējiet failu apgriešanu, lai novērstu neierobežotu diska izmantošanu:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Šī konfigurācija uztur aptuveni 1 GB notikumu datu (10 faili × 100 MB). Pielāgojiet atbilstoši savām saglabāšanas prasībām un pieejamajai krātuvei.
12. Pagarinātu notikumu problēmu novēršana
12.1. Bieži sastopamās problēmas un risinājumi
Bieži sastopamas paplašināto notikumu problēmas ietver sesijas, kurās netiek apkopoti dati, veiktspējas pasliktināšanos, failu tarrodas problēmas un negaidīta sesijas uzvedība.
12.2 Sesija neuztver datus
Ja sesija neuztver paredzētos notikumus:
- Pārliecinieties, vai sesija ir started, izmantojot sys.dm_xe_sessions.
- Pārbaudiet predikātus, lai pārliecinātos, ka tie neizfiltrē visus notikumus.
- Notikumu aktivizēšanas apstiprināšana pēc tempararuzmanīgi noņemot filtrus.
- Pārskatiet atļaujas, lai pārliecinātos, ka jums ir piekļuve sesijas datu skatīt.
- Pārbaudiet to tariegūt konfigurāciju ir pareiza un rakstāma.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Veiktspējas pasliktināšanās
Ja paplašinātie notikumi rada veiktspējas problēmas:
- Pievienojiet predikātus, lai samazinātu notikumu skaitu.
- Novērsiet nevajadzīgas darbības, kas uzkrāj uztura bagātinātājustary dati.
- Palieliniet MAX_DISPATCH_LATENCY, lai samazinātu rakstīšanas biežumu.
- Mainiet EVENT_RETENTION_MODE uz ALLOW_SINGLE_EVENT_LOSS.
- Augstas frekvences notikumiem apsveriet iespēju izmantot ring_buffer, nevis event_file.
12.4 Fails Tariegūt problēmas
fileja tarProblēmas bieži vien ir saistītas ar atļaujām vai diska vietu:
- Pārbaudiet SQL Server pakalpojuma kontam ir rakstīšanas atļaujas tariegūt direktoriju.
- Pārliecinieties, vai diskā ir pietiekami daudz vietas.
- Pārbaudiet, vai norādītais ceļš pastāv un ir pieejams.
- Ja failu pārnešana nenotiek, kā paredzēts, pārskatiet failu pārnešanas konfigurāciju.
12.5 Kļūdu novēršana, izmantojot sistēmas skatus
Izmantojiet DMV, lai diagnosticētu paplašināto notikumu problēmas:
-- 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. Padziļinātas tēmas
13.1 Pielāgotu pasākumu pakotņu izveide
Pieredzējuši lietotāji var izveidot pielāgotas pasākumu paketes, lai tās paplašinātu SQL Server Paplašināta notikumu funkcionalitāte. Tam nepieciešama C++ izstrāde un integrācija ar SQL Server paplašināmības ietvars.
Pielāgotas pakotnes ļauj uzraudzīt lietojumprogrammām raksturīgus notikumus vai integrēt trešo pušu uzraudzības sistēmas ar paplašināto notikumu infrastruktūru.
13.2 Pasākumu sesiju veidnes
SSMS nodrošina iebūvētas veidnes bieži sastopamiem uzraudzības scenārijiem. Piekļūstiet veidnēm, veidojot jaunas sesijas, izmantojot vedni:
- Dialoglodziņā Jauna sesija noklikšķiniet uz pogas Krāsains nomest lejā.
- Atlasiet kādu no pieejamajām veidnēm, piemēram, Vaicājuma detaļu izsekošana vai Sistēmas veselība.
- Modificējiet veidni atbilstoši savām īpašajām prasībām.
13.3 Integrācija ar uzraudzības risinājumiem
Paplašinātie notikumu dati var sniegt informāciju uzņēmuma uzraudzības risinājumiem:
- Eksportēt notikumu datus uz centralizētām reģistrēšanas sistēmām
- Parsēt notikumu failus un ielādēt datus uzraudzības datubāzēs
- Izveidojiet pielāgotus informācijas paneļus, izmantojot BI rīkus
- Aktivizēt brīdinājumus, pamatojoties uz konkrētiem notikumu modeļiem
- Korelēt SQL Server notikumi ar lietojumprogrammu un infrastruktūras metriku
13.4 Automatizācija un plānošana
Automatizējiet paplašināto notikumu pārvaldību, izmantojot SQL Server Aģents:
- Izveidot darbus start/stop sesijas noteiktos laika logos
- Notikumu failu analīzes un ziņošanas plānošana
- Ieviesiet datu saglabāšanas politikas, arhivējot vai dzēšot vecos notikumu failus.
- Automatizēta reaģēšana uz atklātiem stāvokļiem, piemēram, veiktspējas problēmām vai drošības notikumiem
14. Migrācija no SQL Server Profils
14.1 SQL Server Profiler notikumu kartēšana paplašinātā notikumu kartēšanā
Microsoft nodrošina kartēšanu starp SQL Server Profils notikumi un paplašinātie notikumi. Bieži sastopamie kartējumi ietver:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:BatchStarting -> sql_batch_starTing
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starTing
- Strupceļa grafiks -> xml_deadlock_report
- Audita pieteikšanās -> pieteikšanās
- Audita atteikšanās -> atteikšanās
14.2 Izsekošanas definīciju konvertēšana
Konvertēt esošo SQL Server Profilētājs izseko līdz paplašināto notikumu sesijām, identificējot līdzvērtīgus notikumus un konfigurējot atbilstošus predikātus. SSMS sniedz palīdzību bieži sastopamām konvertēšanas darbībām.
Pārskatiet izsekošanas filtrus un konvertējiet tos uz paplašināto notikumu predikātiem. Darbības paplašinātajos notikumos aizstāj izsekošanas kolonnas no SQL Server Profilētājs.
14.3. Veiktspējas salīdzinājums
Paplašinātie notikumi nodrošina ievērojami labāku veiktspēju nekā SQL Server Profiler. Salīdzinošie pētījumi liecina, ka pagarinātie notikumi patērē mazāk centrālā procesora ciklu un mazāk ietekmē darījumu caurlaidspēju.
Paplašinātie notikumi izmanto asinhronu apstrādi un optimizētu atmiņas pārvaldību, savukārt SQL Server Profiler izmanto sinhronu notikumu uztveršanu, kas bloķējas, līdz izsekošanas apstrāde ir pabeigta.
15. secinājums
15.1. Galveno jēdzienu kopsavilkums
SQL Server Paplašinātie notikumi nodrošina jaudīgu un vieglu sistēmu uzraudzībai un problēmu novēršanai SQL ServerArhitektūra sastāv no notikumiem, darbībām, predikātiem, tarsaņem un sesijas, kas darbojas kopā, lai fiksētu atbilstošu servera aktivitāti.
Sesijas var izveidot, izmantojot SSMS vai T-SQL, kas piedāvā elastību gan ad-hoc problēmu novēršanai, gan automatizētai uzraudzībai. target tipi atbalsta dažādas analīzes pieejas, sākot no reāllaika uzraudzības ar ring_buffer līdz vēsturiskai analīzei ar event_file.
Paplašinātie notikumi nodrošina labāku veiktspēju salīdzinājumā ar SQL Server Profiler, vienlaikus nodrošinot visaptverošākas uzraudzības iespējas. Sistēma ļauj datubāzu administratoriem un izstrādātājiem diagnosticēt problēmas, optimizēt veiktspēju, uzlabot drošību un uzturēt atbilstību.
15.2 Nākamie soļi un papildu resursi
Lai turpinātu attīstīt savu SQL Server XEvents kompetence:
- Ieviesiet paplašinātos notikumus testa vidēs, lai iegūtu praktisku pieredzi
- Pilnus notikumu katalogus un detalizētu sintakses atsauci skatiet Microsoft dokumentācijā.
- pievienoties SQL Server kopienas forumi, lai mācītos no citu pieredzes
- Izpētiet papildu scenārijus, piemēram, pielāgotas pakotnes un integrāciju ar uzraudzības platformām
- Izstrādāt bibliotēkurarsesiju veidņu skaits bieži sastopamiem uzraudzības scenārijiem
16 Bieži uzdoto jautājumu sadaļa
J: Kas ir SQL Server Pagarināti pasākumi?
A: SQL Server Extended Events ir viegla veiktspējas uzraudzības sistēma, kas integrēta SQL Server Datu bāzes dzinējs, kas ar minimālām papildu izmaksām apkopo detalizētu informāciju par servera darbību.
J: Kā pagarinātie notikumi atšķiras no SQL Server Profilētājs?
A: Paplašinātie notikumi nodrošina labāku veiktspēju, zemākas izmaksas un elastīgāku konfigurāciju nekā SQL Server Profilētājs. SQL Server Profiler vairs netiek atbalstīts, un Microsoft iesaka visiem uzraudzības uzdevumiem izmantot paplašinātos notikumus.
J: Vai ilgstoši notikumi var ietekmēt SQL Server sniegums?
A: Pareizi konfigurētiem ar atbilstošiem predikātiem un resursu ierobežojumiem, paplašinātajiem notikumiem ir minimāla ietekme uz veiktspēju. Slikta konfigurācija bez filtrēšanas var ietekmēt veiktspēju.
J: Kādas atļaujas ir nepieciešamas, lai izveidotu paplašinātu notikumu sesijas?
A: Servera darbības jomas sesijām ir nepieciešama atļauja MAINĪT JEBKURU NOTIKUMU SESIJAS vai datubāzes darbības jomas sesijām — KONTROLES atļauja datubāzē.
J: Kā es varu skatīt paplašināto notikumu datus?
A: Izmantojiet SQL Server Management Studio tiešraides datu skatītājs, vaicājumu notikumu faili ar sys.fn_xe_file_target_read_file vai vaicājiet gredzena bufera datus, izmantojot DMV.
J: Vai paplašinātie notikumi var noteikt datubāzes bojājumus?
A: Jā, paplašinātie notikumi var fiksēt ar bojājumiem saistītas kļūdas (823, 824, 825) un aizdomīgus lapu notikumus, sniedzot agrīnu brīdinājumu par iespējamām bojājumu problēmām.
J: Kāda ir atšķirība starp notikumiem, darbībām un predikātiem?
A: Notikumi ir gadījumi, kurus vēlaties uzraudzīt. Darbības pievieno papildinājumu.tary informāciju uztvertajiem notikumiem. Predikāti filtrē notikumus, pamatojoties uz nosacījumiem, lai samazinātu datu apjomu.
J: Kā es varu pārraudzīt vaicājumus no konkrētām lietojumprogrammām vai datubāzēm?
A: Izmantojiet predikātus notikumu konfigurācijā, lai filtrētu pēc database_name, client_app_name vai citiem atbilstošiem laukiem.
J: Kas tarKo man vajadzētu izmantot pagarinātiem pasākumiem?
A: Pastāvīgai glabāšanai un vēsturiskai analīzei izmantojiet event_file, reāllaika uzraudzībai ar zemu papildu slodzi — ring_buffer, vienkāršai frekvences izsekošanai — event_counter un sadalījuma analīzei — histogram.
J: Vai Azure SQL datubāzē ir pieejami paplašinātie notikumi?
A: Jā, Azure SQL datubāze atbalsta datubāzes tvēruma paplašinātos notikumus ar notikumu failiem, kas tiek glabāti Azure Blob Storage.
J: Kā novērst problēmas paplašinātu notikumu sesijā, kurā netiek apkopoti dati?
A: Pārliecinieties, vai sesija ir starTed, pārbaudiet, vai predikāti nefiltrē visus notikumus, apstipriniet tariegūt konfigurāciju un pārskatīt atļaujas, izmantojot sistēmas DMV.
J: Vai varu automatizēt paplašināto notikumu pārvaldību?
A: Jā, izmantojiet SQL Server Aģenta darbi starapturēt sesijas, analizēt notikumu failus, ieviest saglabāšanas politikas un reaģēt uz atklātajiem nosacījumiem.
Atsauces
- Ātrā Start: Paplašināti notikumi SQL Server – Microsoft Learn
- Paplašināts notikumu pārskats — Microsoft Learn
- SQL Server Paplašinātas pasākumu sesijas — Microsoft Learn
- Tarsaņem pagarinātus pasākumus SQL Server – Microsoft Learn
- SQL Server Paplašinātā notikumu programma — Microsoft Learn
- SQL Server Profilētājs: Pilnīgs ceļvedis
- DBCC CHECKDB: Pilnīgs ceļvedis
- DataNumen SQL Recovery
par autoru
Juaņs Šens ir vecākais datubāzes administrators (DBA) ar vairāk nekā 10 gadu pieredzi SQL Server vides un uzņēmumu datubāzu pārvaldību. Viņš ir veiksmīgi atrisinājis simtiem datubāzu atkopšanas scenāriju finanšu pakalpojumu, veselības aprūpes un ražošanas organizācijās.
Juaņa specializējas SQL Server datubāzes atgūšana, augstas pieejamības risinājumiun veiktspējas optimizāciju. Viņa plašā praktiskā pieredze ietver vairāku terabaitu datubāzu pārvaldību, ieviešanu Vienmēr pieejamības grupas, un izstrādājot automatizētas dublēšanas un atkopšanas stratēģijas misijai kritiski svarīgām biznesa sistēmām.
Izmantojot savu tehnisko pieredzi un praktisko pieeju, Juans koncentrējas uz visaptverošu rokasgrāmatu izveidi, kas palīdz datubāzu administratoriem un IT speciālistiem risināt sarežģītus jautājumus SQL Server efektīvi izaicina. Viņš seko līdzi jaunākajām tendencēm SQL Server laidieniem un Microsoft attīstītajām datubāzu tehnoloģijām, regulāri testējot atkopšanas scenārijus, lai nodrošinātu, ka viņa ieteikumi atspoguļo labāko praksi reālajā pasaulē.
Ir jautājumi par SQL Server atkopšanai vai nepieciešama papildu palīdzība datubāzes problēmu novēršanā? Juans laipni aicina atsauksmes un ieteikumi lai uzlabotu šos tehniskos resursus.

















