Kopīgot tūlīt:
Saturs slēpt
8. Praktiski lietošanas gadījumi un piemēri

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.

  1. atvērts SQL Server Management Studio un izveidojiet savienojumu ar savu SQL Server piemērs
  2. Objektu pārlūkā izvērsiet vadība -> Paplašināti notikumi.
  3. Paplašināto notikumu mezgls satur Sessions un Paketes mapes uzraudzības konfigurāciju pārvaldībai.

Piekļūstiet paplašināto notikumu saskarnei sadaļā SQL Server Vadības studija.

4.3 Jaunas sesijas izveide

Lai izveidotu jaunu sesiju:

    1. Ar peles labo pogu noklikšķiniet uz Sessions mape zem Paplašināti notikumi.
    2. Izvēlēties Jauna sesija lai atvērtu konfigurācijas dialoglodziņu. Šajā saturā šī metode tiks izmantota jaunas sesijas izveidei.

Izveidot jaunu paplašināto notikumu sesiju sadaļā SQL Server Vadības studija.

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:

  1. Ievadiet sesijas nosaukumu laukā Sesijas nosaukums lauks. Izmantojiet aprakstošus nosaukumus, kas norāda uzraudzības mērķi.
  2. Pēc izvēles atlasiet Start notikuma sesija serverī starcaurule lai iespējotu automātisku sesijas aktivizēšanu.
  3. Noklusējuma sesijas veidne ir TukšsVarat izmantot citas veidnes, ja izmantojat iepriekš definētu konfigurāciju.

Paplašināto notikumu sesijas vispārīgā lapa SQL Server Vadības studija.

4.3.2 Notikumu lapas iestatīšana

The Pasākumi lapa ļauj atlasīt, kurus notikumus uzraudzīt:

  1. Izvēlieties Pasākumi lapa no kreisās puses Atlasiet lapu panelis.
  2. Iekš Pasākumu bibliotēkarary, pārlūkojiet pieejamos pasākumus vai izmantojiet meklēšanas funkciju.
  3. Filtrējiet notikumus, ierakstot atslēgvārdus, piemēram, “sql_statement_completed”, lai atrastu atbilstošus notikumus.
  4. Atlasiet vēlamo notikumu, piemēram, sql_statement_completed.
  5. Noklikšķiniet uz labās bultiņas pogas, lai pārvietotu notikumu uz Atlasītie notikumi sarakstu.

Paplašinātās notikumu sesijas notikumu lapa sadaļā SQL Server Vadības studija.

4.3.3 Datu glabāšanas konfigurācija

The Data Storage lapa nosaka, kur tiek glabāti notikumu dati:

  1. Izvēlieties Data Storage lapa no kreisās puses Atlasiet lapu panelis.
  2. Iekš Tarizpaužas apgabalu, izvēlieties tariegūt tipu no nolaižamās izvēlnes.

Paplašināto notikumu sesijas datu glabāšanas lapa SQL Server Vadības studija.

(1) notikumu_fails Tarsaņemt

Notikuma_fails target saglabā datus diska failos ar paplašinājumu .xel:

  1. Izvēlēties notikuma_fails no tariegūt tipa nolaižamo izvēlni.
  2. Norādiet faila ceļu, piemēram, C:\temp\YourSession_Target.xel.
  3. Konfigurējiet apgāšanās opcijas, lai pārvaldītu diska vietu, iestatot maksimālo faila lielumu un failu skaitu.
  4. The target ieraksta notikumus nepārtraukti, līdz sesija apstājas vai tiek sasniegti krātuves ierobežojumi.

Iestatiet sesiju tarnokļūt uz event_file SSMS

(2) gredzenveida buferis Tarsaņemt

Gredzenveida buferis tariegūt saglabā notikumus atmiņā, lai nodrošinātu ātru piekļuvi bez diska ievades/izvades:

  1. Izvēlēties gredzenveida buferis jo tariegūt tipu.
  2. Konfigurējiet maksimālo atmiņas piešķiršanu buferim.
  3. Saprotiet, ka vecāki notikumi tiek atmesti, kad buferis piepildās, padarot to piemērotu neseno darbību uzraudzībai.

Iestatiet tarnokļūt ring_buffer paplašināto notikumu sesijai SQL Server Vadības studija.

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

Iestatiet tariegūt event_counter paplašināto notikumu sesijai SQL Server Vadības studija.

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

Iestatiet tarnokļūt histogrammā paplašināto notikumu sesijai SQL Server Vadības studija.

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

Iestatiet sesiju tarnokļūt līdz pair_matching SSMS

4.3.4 Paplašinātie iestatījumi

The uzlabots lapā ir pieejamas sesijas līmeņa konfigurācijas opcijas:

  1. Izvēlieties uzlabots lapa no kreisās puses Atlasiet lapu panelis.
  2. Konfigurēt Notikumu saglabāšanas režīms lai kontrolētu, kā notikumi tiek apstrādāti atmiņas spiediena apstākļos.
  3. Noteikt Maksimālā nosūtīšanas latentuma lai līdzsvarotu reāllaika apstrādi ar sistēmas veiktspēju.
  4. Konfigurēt Maksimālais atmiņas apjoms un Maksimālais pasākuma lielums pamatojoties uz jūsu uzraudzības prasībām.
  5. Izvēlēties Atmiņas nodalījuma režīms lai optimizētu viena vai vairāku procesoru vidēm.

Sesijas papildu lapa sadaļā SQL Server Vadības studija.

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:

  1. Gada Pasākumi lapā atlasiet notikumu, kuru vēlaties filtrēt, piemēram, “sql_statement_completed”.
  2. Noklikšķiniet Konfigurēt , lai atvērtu notikuma konfigurācijas dialoglodziņu.
    Konfigurējiet paplašināto notikumu sesijas notikumu sadaļā SQL Server Vadības studija.
  3. Izvēlieties Filtrs (Predikāts) Tab.
  4. Iekš Lauks Nolaižamajā izvēlnē izvēlieties lauku, pēc kura filtrēt, piemēram, ilgumu.
  5. Izvēlieties a operators, piemēram, “>”.
  6. Ievadiet filtru Vērtība, piemēram, 1000000 (1 sekunde).
  7. Ja nepieciešams, pievienojiet vēl citus nosacījumus.

Konfigurējiet notikuma filtrus (predikātus).

4.5 Darbību un notikumu lauku atlasīšana

Katram notikumam varat atlasīt apkopojamo datu kopu:

  1. Gada Pasākumi lapā atlasiet notikumu, kuram vēlaties atlasīt datus, piemēram, “sql_statement_completed”.
  2. Noklikšķiniet Konfigurēt , lai atvērtu notikuma konfigurācijas dialoglodziņu.
  3. Izvēlieties Globālie lauki (darbības) Tab.
  4. Atlasiet darbības, lai pievienotu papildinājumutary informāciju, piemēram, database_name vai client_app_name.
    Konfigurējiet notikuma darbības.
  5. Pārskatiet Notikumu lauki sadaļu, lai redzētu, kuri lauki tiek automātiski ierakstīti.
  6. Notīriet visus nevajadzīgos laukus, lai samazinātu datu apjomu.
    Konfigurējiet notikuma laukus.

4.6 Starsesiju veidošana un pārvaldība

Pēc sesijas konfigurēšanas varat starto un uzraugiet tā darbību:

  1. Noklikšķiniet OK lai izveidotu sesiju.
  2. Objektu pārlūkā izvērsiet Sessions mapi, lai skatītu savu jauno sesiju.
  3. Ar peles labo pogu noklikšķiniet uz sesijas nosaukuma un atlasiet Start sesija lai sāktu fiksēt notikumus.
    Start paplašinātu pasākumu sesija SQL Server Vadības studija.
  4. Lai skatītu tiešraides datus, ar peles labo pogu noklikšķiniet uz sesijas un atlasiet Tiešraides dati.
    Skatieties paplašināto notikumu sesijas tiešraides datus sadaļā SQL Server Vadības studija.
  5. 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ā:

  1. Objektu pārlūkā izvērsiet vadība -> Paplašināti notikumi -> Sessions.
  2. Ar peles labo pogu noklikšķiniet uz aktīvās sesijas.
  3. Izvēlēties Tiešraides dati , lai atvērtu tiešraides datu skatītāju.
    Skatieties paplašināto notikumu sesijas tiešraides datus sadaļā SQL Server Vadības studija.
  4. Notikumi režģī tiek parādīti, tiklīdz tie notiek.
  5. Noklikšķiniet uz atsevišķiem notikumiem, lai detalizētās informācijas rūtī skatītu detalizētas lauku vērtības.
    Skatieties notikumu tiešraides datus, tostarp informāciju par notikumiem.
  6. 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:

  1. Konfigurēt SQL Server Aģenta uzdevums periodiski veikt vaicājumus korupcijas uzraudzības notikumu failā.
  2. Kad tiek atrasti bojājuma notikumi, attiecīgajā datubāzē izpildīt komandu DBCC CHECKDB.
  3. Sūtīt e-pasta brīdinājumus datubāzes administratoriem ar notikumu informāciju un DBCC CHECKDB rezultātiem.
  4. 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:

  1. Pārliecinieties, vai sesija ir started, izmantojot sys.dm_xe_sessions.
  2. Pārbaudiet predikātus, lai pārliecinātos, ka tie neizfiltrē visus notikumus.
  3. Notikumu aktivizēšanas apstiprināšana pēc tempararuzmanīgi noņemot filtrus.
  4. Pārskatiet atļaujas, lai pārliecinātos, ka jums ir piekļuve sesijas datu skatīt.
  5. 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:

  1. Pievienojiet predikātus, lai samazinātu notikumu skaitu.
  2. Novērsiet nevajadzīgas darbības, kas uzkrāj uztura bagātinātājustary dati.
  3. Palieliniet MAX_DISPATCH_LATENCY, lai samazinātu rakstīšanas biežumu.
  4. Mainiet EVENT_RETENTION_MODE uz ALLOW_SINGLE_EVENT_LOSS.
  5. 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:

  1. Pārbaudiet SQL Server pakalpojuma kontam ir rakstīšanas atļaujas tariegūt direktoriju.
  2. Pārliecinieties, vai diskā ir pietiekami daudz vietas.
  3. Pārbaudiet, vai norādītais ceļš pastāv un ir pieejams.
  4. 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:

  1. Dialoglodziņā Jauna sesija noklikšķiniet uz pogas Krāsains nomest lejā.
  2. Atlasiet kādu no pieejamajām veidnēm, piemēram, Vaicājuma detaļu izsekošana vai Sistēmas veselība.
  3. 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


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.

Kopīgot tūlīt: