Sisukord peida

1. Sissejuhatus

1.1 Mis on SQL Server Pikendatud sündmused?

SQL Server Extended Events on kerge jõudluse jälgimise süsteem, mis võimaldab administraatoritel ja arendajatel koguda ja analüüsida üksikasjalikke serveri aktiivsuse andmeid. See süsteem on integreeritud SQL Server Andmebaasimootor ja pakub põhjalikku ülevaadet nii tavapärastest toimingutest kui ka tõrkeotsingu stsenaariumidest.

1.2 Miks kasutada jälgimisel laiendatud sündmusi?

SQL Server Laiendatud sündmused pakuvad andmebaasi jälgimiseks ja tõrkeotsinguks mitmeid kaalukaid eeliseid:

  • Minimaalne jõudlusmõju kerge arhitektuuri tõttu
  • Andmete kogumise ja sündmuste filtreerimise detailne kontroll
  • Kohandatav andmekogumine vastavalt konkreetsetele jälgimisvajadustele
  • Võimalus jäädvustada sündmusi mitmest paketist samaaegselt
  • Paindlikud filtreerimisvõimalused, et keskenduda asjakohastele toimingutele
  • Toetus tootmissüsteemi jälgimiseks ilma kasutajakogemust halvendamata
  • Põhjalik tulemusnäitajate jälgimine
  • Täiustatud diagnostikavõimalused tõrkeotsinguks
  • Vastavusnõuete auditeerimisjälje hooldus
  • Reaalajas ja ajalooliste andmete analüüsi valikud

1.3 Pikendatud sündmused vs. SQL Server Profiler

Kui SQL Server Profiler Kuigi see on olnud traditsiooniline jälgimisvahend, pakub MS SQL Extended Events tõhusamat alternatiivi. Extended Events tarbib vähem süsteemiressursse ja pakub paremat skaleeritavust tootmiskeskkondades.

SQL Server Profiler on nüüd aegunud ja Microsoft soovitab kõigi jälgimistegevuste jaoks üle minna laiendatud sündmustele.

2. Laiendatud sündmuste arhitektuuri mõistmine

2.1 Laiendatud sündmuste mootori komponendid

Laiendatud sündmuste mootor koosneb mitmest põhikomponendist, mis töötavad koos sündmuste andmete jäädvustamiseks, töötlemiseks ja salvestamiseks. Nende komponentide mõistmine aitab teil kujundada tõhusaid jälgimislahendusi.

  • Dispetšer: Dispetšerkomponent koordineerib sündmuste voogu sündmuste allikatest laiendatud sündmuste mootorisse. Kui sündmus käivitub, saab dispetšer teate ja suunab selle aktiivsetele seanssidele, mis on selle konkreetse sündmusetüübi tellinud.
  • puhver: Puhvrid salvestavad sündmuste andmeid ajutiselt mällu enne sihtkohtadesse kirjutamist. See puhverdusmehhanism parandab jõudlust, vähendades sisend-/väljundoperatsioone. Puhvri suurust ja haldusseadeid saab konfigureerida nii, et need tasakaalustaksid mälukasutust andmete jäädvustamise nõuetega.
  • Seanss: Seanss määratleb sündmuste jälgimise ulatuse. See määrab, milliseid sündmusi jäädvustada, milliseid toiminguid teostada, milliseid predikaate rakendada ja kuhu tulemusi salvestada. Seansse saab luua, muuta, käivitada ja peatada iseseisvalt.
  • Sihtmärk: Sihtmärgiks olevad eksemplarid esindavad jäädvustatud sündmuste andmete salvestussihtkohti. Iga seanss saab kirjutada ühte või mitmesse sihtmärki, näiteks failidesse, rõngaspuhvritesse või loenduritesse. Sihtmärgid töötlevad ja säilitavad sündmuste teavet hilisemaks analüüsiks.

2.2 Ürituste paketid

SQL Server Laiendatud sündmuste pakett korraldab funktsionaalsuse pakettidesse. Iga pakett sisaldab seotud sündmusi, toiminguid, tüüpe, predikaate ja sihtmärke. Levinud pakettide hulka kuuluvad sqlserver, sqlos ja package0.

  • SQLserveri pakett pakub andmebaasispetsiifilisi sündmusi, näiteks päringuid ja tehinguid.
  • SQLOS-pakett sisaldab operatsioonisüsteemi sündmusi.
  • Pakett0 pakub üldotstarbelist funktsionaalsust, mida kasutatakse kõigis pakettides.

2.3 Sündmuste tüübid ja väljad

Sündmused esindavad sündmusi seespool SQL Server mida soovite jälgida. Igal sündmusetüübil on eelnevalt määratletud väljad, mis jäädvustavad asjakohast teavet. Näiteks sündmus sql_statement_completed sisaldab välju kestuse, protsessori aja, lugemiste ja kirjutamiste kohta.

Sündmused võivad olla sünkroonsed või asünkroonsed. Sünkroonsed sündmused käivituvad toimingu enda ajal, asünkroonsed aga pärast selle lõpetamist. Sündmuste omaduste mõistmine aitab teil valida oma jälgimisvajaduste jaoks sobivad sündmused.

2.4 Toimingud

Toimingud lisavad jäädvustatud sündmustele lisateavet. Kui sündmus käivitub, käivitatakse seotud toimingud, et koguda täiendavat konteksti, näiteks SQL-teksti, seansi ID-d või kõnepinu teavet.

Levinud toimingute hulka kuuluvad sql_text päringulausete jäädvustamiseks, database_name andmebaasi tuvastamiseks ja client_hostname algse serveri jälgimiseks. Toimingud pakuvad olulist konteksti tõrkeotsinguks ja analüüsiks.

2.5 Eesmärgid

Sihtmärgid määravad, kuidas ja kuhu sündmuste andmeid salvestatakse. SQL Server Laiendatud sündmused toetavad mitut tüüpi sihtmärke, sealhulgas:

  • event_file kettale salvestamiseks, pakkudes püsivat salvestusruumi üksikasjalikuks analüüsiks
  • ring_buffer mälupõhiseks säilitamiseks, pakkudes kiiret juurdepääsu hiljutistele sündmustele minimaalse üldkuluga
  • lihtsa loendamise jaoks event_counter
  • histogramm rühmitamiseks
  • paaride sobitamine seotud sündmuste korreleerimiseks

2.6 Predikaadid (filtrid)

Predikaadid filtreerivad sündmusi kindlaksmääratud tingimuste alusel, vähendades jäädvustatud andmete mahtu. Filtreerida saab andmebaasi nime, rakenduse nime, seansi ID, kestuse lävede või mis tahes sündmuse välja väärtuse järgi.

Predikaatide efektiivne kasutamine minimeerib jõudluse mõju, jäädvustades ainult asjakohased sündmused. Komplekssed predikaadid kombineerivad loogiliste operaatorite abil mitu tingimust, et luua täpsed filtreerimiskriteeriumid.

3. Laiendatud sündmuste seansi olekud ja elutsükkel

3.1 Seansi olekud: CREATE, ALTER ja DROP

Laiendatud sündmuste seansid edeneb läbi erinevate olekute:

  • Lause CREATE EVENT SESSION defineerib uue seansi, kuid ei käivita seda. Seanss on peatatud olekus kuni selle selgesõnalise aktiveerimiseni.
  • ALTER EVENT SESSION käsk muudab seansi konfiguratsiooni või muudab selle olekut peatatud ja käivitatud vahel.
  • DROP EVENT SESSION käsk eemaldab seansi definitsiooni serverist täielikult.

3.2 Seansi sisu ja omadused

Iga seanss sisaldab sündmuste, toimingute, sihtmärkide ja predikaatide kogumit. Seanssidel on kaudsed piirid, mis määravad nende ulatuse ja käitumise. Konfiguratsioonivalikud kontrollivad mälu eraldamist, sündmuste säilitamist ja saatmise latentsust.

Seansi omaduste hulka kuuluvad see, kas need püsivad serveri taaskäivitamisel, maksimaalne mälumaht ja kuidas need mälukoormusega toime tulevad. Need sätted mõjutavad oluliselt seansi käitumist ja ressursikasutust.

3.3 Seansi piirid ja paketid

Seansi piirid määravad sündmuste, sihtmärkide ja pakettide vahelised seosed. Ühe paketi sündmused võivad käivitada toiminguid teisest paketist, pakkudes andmekogumisstrateegiates paindlikkust.

Pakettide seosed võimaldavad teil ühendada sündmusi mitmest allikast ühe seansi jooksul. See funktsioon võimaldab ulatuslikke jälgimisstsenaariume, mis hõlmavad erinevaid SQL Server alamsüsteemid.

4. Laiendatud sündmuste seansside loomine SSMS-i abil

4.1 Eeltingimused ja seadistamine

Enne loomist SQL Server Laiendatud sündmuste seansside korral veenduge, et teil on vastavad õigused. Serveri ulatusega seansside jaoks on vaja luba „Muuda mis tahes sündmuse seanssi“ või andmebaasi ulatusega seansside jaoks luba „Juhtida“.

Kontrollige seda SQL Server Management Studio on installitud ja teie sihtobjektiga ühendatud. Tutvuge jälgimisnõuetega ja tehke kindlaks, millised sündmused ja eesmärgid teie vajadustele kõige paremini vastavad.

4.2 Laiendatud sündmustele juurdepääs objektide uurijas

SSMS-i laiendatud sündmuste liidesele juurdepääsuks toimige järgmiselt.

  1. avatud SQL Server Management Studio ja loo ühendus oma SQL Server Näiteks
  2. Objektihalduris laiendage juhtimine -> Laiendatud sündmused.
  3. Laiendatud sündmuste sõlm sisaldab Seansid ja Paketid kaustad jälgimiskonfiguratsioonide haldamiseks.

Laiendatud sündmuste liidese avamine SQL Server Juhtimisstuudio.

4.3 Uue seansi loomine

Uue seansi loomiseks:

    1. Paremklõpsake nuppu Seansid kausta all Laiendatud sündmused.
    2. valima Uus seanss konfiguratsioonidialoogi avamiseks. Järgnev sisu kasutab seda meetodit uue seansi loomiseks.

Loo uus laiendatud sündmuste seanss jaotises SQL Server Juhtimisstuudio.

Märkus: Uue seansi viisard on saadaval ka giidiga kogemuse saamiseks.

4.3.1 Üldine lehe konfiguratsioon

Kohta Üldine lehel seadistage seansi põhiomadused:

  1. Sisestage seansi nimi väljale Seansi nimi väli. Kasutage kirjeldavaid nimetusi, mis viitavad jälgimise eesmärgile.
  2. Valikuliselt valige Alusta sündmuse seanssi serveri käivitamisel automaatse seansi aktiveerimise lubamiseks.
  3. Vaikimisi seansi mall on TühiEelnevalt määratletud konfiguratsiooni kasutamisel võite kasutada ka teisi malle.

Laiendatud sündmuste seansi üldleht SQL Server Juhtimisstuudio.

4.3.2 Sündmuste lehe seadistamine

. Sündmused leht võimaldab teil valida, milliseid sündmusi jälgida:

  1. Valige Sündmused leht vasakult Valige leht paneeli.
  2. aasta Ürituste kogu, sirvi saadaolevaid sündmusi või kasuta otsingufunktsiooni.
  3. Asjakohaste sündmuste leidmiseks filtreerige sündmusi märksõnade (nt „sql_statement_completed”) abil.
  4. Valige soovitud sündmus, näiteks sql_statement_completed.
  5. Sündmuse teisaldamiseks klõpsake parempoolset noolenuppu. Valitud sündmused nimekiri.

Laiendatud sündmuste seansi sündmuste leht SQL Server Juhtimisstuudio.

4.3.3 Andmesalvestuse konfiguratsioon

. Data Storage leht määratleb, kuhu sündmuste andmed salvestatakse:

  1. Valige Data Storage leht vasakult Valige leht paneeli.
  2. aasta Sihid valige rippmenüüst sihtmärgi tüüp.

Laiendatud sündmuste seansi andmesalvestusleht SQL Server Juhtimisstuudio.

(1) sündmuse_fail Sihtmärk

Sihtmärk event_file salvestab andmed kettafailidele laiendiga .xel:

  1. valima sündmuse_fail sihtmärgi tüübi rippmenüüst.
  2. Määrake faili tee, näiteks C:\temp\YourSession_Target.xel.
  3. Konfigureerige kettaruumi haldamiseks ümberpaigutamise valikud, määrates maksimaalse failisuuruse ja failide arvu.
  4. Sihtmärk kirjutab sündmusi pidevalt, kuni seanss peatub või salvestuslimiit on saavutatud.

Määrake seansi sihtmärgiks SSMS-is event_file

(2) ring_bufferi sihtmärk

ring_buffer sihtmärk salvestab sündmused mällu kiireks juurdepääsuks ilma ketta sisend-/väljundfunktsioonita:

  1. valima ring_buffer sihttüübina.
  2. Konfigureerige puhvri maksimaalne mälumaht.
  3. Arvestage sellega, et vanemad sündmused kustutatakse puhvri täitumisel, mistõttu sobib see hiljutise tegevuse jälgimiseks.

Määrake laiendatud sündmuste seansi sihtmärgiks ring_buffer SQL Server Juhtimisstuudio.

(3) sündmuste_loenduri sihtmärk

event_counter sihtmärk loendab lihtsalt sündmuste esinemisi ilma üksikasjalikke andmeid salvestamata. See vähendab üldkulu, kui vaja läheb ainult sagedusinfot.

Määrake laiendatud sündmuste seansi sihtmärgiks event_counter SQL Server Juhtimisstuudio.

(4) histogrammi sihtmärk

Histogramm rühmitab sündmused kindlaksmääratud väljaväärtuse järgi, luues jaotusstatistikat. See on kasulik tavaliste mustrite või kõrge sagedusega väärtuste tuvastamiseks.

Määrake laiendatud sündmuste seansi sihtmärgiks histogramm SQL Server Juhtimisstuudio.

(5) paari_matching sihtmärk

Pair_matching sihtmärk korreleerib seotud sündmusi, näiteks lukustuse omandamist ja vabastamist. See võimaldab analüüsida paaristoiminguid ja nende ajastuse seoseid.

Määrake seansi sihtmärgiks SSMS-is pair_matching

4.3.4 Lisaseaded

. edasijõudnud leht pakub seansi tasemel konfiguratsioonivalikuid:

  1. Valige edasijõudnud leht vasakult Valige leht paneeli.
  2. Seadistamine Sündmuste säilitamise režiim et kontrollida sündmuste käsitlemist mälu surve all.
  3. komplekt Maksimaalne lähetuse latentsus reaalajas töötlemise ja süsteemi jõudluse tasakaalustamiseks.
  4. Seadistamine Maksimaalne mälumaht ja Maksimaalne sündmuse suurus teie jälgimisvajaduste põhjal.
  5. valima Mälupartitsiooni režiim ühe või mitme protsessoriga keskkondade optimeerimiseks.

Seansi täpsem leht SQL Server Juhtimisstuudio.

4.4 Sündmuste filtrite (predikaatide) seadistamine

Predikaadid vähendavad andmemahtu, filtreerides sündmusi kindlate kriteeriumide alusel. Filtrite konfigureerimiseks toimige järgmiselt.

  1. Kohta Sündmused Valige lehelt filtreeritav sündmus, näiteks „sql_statement_completed”.
  2. Click Seadistamine sündmuse konfiguratsioonidialoogi avamiseks.
    Laiendatud sündmuste seansi sündmuse konfigureerimine jaotises SQL Server Juhtimisstuudio.
  3. Valige Filter (predikaat) Tab.
  4. aasta Väli rippmenüüst valige filtreerimiseks väli, näiteks kestus.
  5. Valige a operaator, näiteks „>”.
  6. Sisestage filter Väärtus, näiteks 1000000 (1 sekund).
  7. Vajadusel lisa rohkem tingimusi.

Sündmuse filtrite (predikaatide) konfigureerimine.

4.5 Toimingute ja sündmuste väljade valimine

Iga sündmuse puhul saate valida kogutavad andmed:

  1. Kohta Sündmused Valige lehel sündmus, mille jaoks soovite andmed valida, näiteks „sql_statement_completed”.
  2. Click Seadistamine sündmuse konfiguratsioonidialoogi avamiseks.
  3. Valige Globaalsed väljad (toimingud) Tab.
  4. Valige toimingud lisateabe (nt andmebaasi_nimi või kliendi_rakenduse_nimi) lisamiseks.
    Sündmuse toimingute konfigureerimine.
  5. Vaadake üle Sündmuste väljad jaotises, et näha, millised väljad automaatselt jäädvustatakse.
  6. Andmemahu vähendamiseks tühjendage kõik mittevajalikud väljad.
    Sündmuse väljade konfigureerimine.

4.6 Seansside alustamine ja haldamine

Pärast seansi seadistamist saate selle käivitada ja selle toimimist jälgida:

  1. Click OK seansi loomiseks.
  2. Objektihalduris laiendage Seansid kausta, et näha oma uut seanssi.
  3. Paremklõpsake seansi nimel ja valige Alusta seanssi sündmuste jäädvustamist alustama.
    Alusta laiendatud sündmuste seanssi SQL Server Juhtimisstuudio.
  4. Reaalajas andmete vaatamiseks paremklõpsake seansil ja valige Otseülekande andmed.
    Vaadake laiendatud sündmuste seansi otseülekandeid SQL Server Juhtimisstuudio.
  5. Seansi peatamiseks paremklõpsake ja valige Peata seanss.

5. Laiendatud sündmuste seansside loomine T-SQL-i abil

5.1 SÜNDMUSE LOOMISE SEANSI süntaks

Laiendatud sündmuste seansside loomine T-SQL-iga pakub täpset kontrolli ja võimaldab skriptimist automaatseks juurutamiseks. Lause CREATE EVENT SESSION järgib kindlat süntaksistruktuuri.

Põhisüntaks sisaldab seansi nime, iga sündmuse ADD EVENT klausleid, salvestussihtkohtade ADD TARGET klausleid ja seansi konfigureerimise valikulisi WITH klausleid.

5.2 Põhisündmuse seansi loomine

Põhiseanss jälgib konkreetseid sündmusi ja kirjutab tulemused sihtkohta. Siin on, kuidas olulisi komponente luua.

5.2.1 Seansi nime ja valikute määratlemine

Alustage seansi loomisest kirjeldava nimega:

CREATE EVENT SESSION [SampleSession] ON SERVER

ON SERVER-klausel loob serveripoolse seansi, mis jääb püsima ka pärast andmebaasi muudatuste tegemist. Azure'i SQL-andmebaasi puhul kasutage andmebaasipoolsete seansside jaoks klauslit ON DATABASE.

5.2.2 Sündmuste lisamine funktsiooniga ADD EVENT

Lisage jäädvustatavad sündmused ADD EVENT klausli abil:

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

See jäädvustab kõik lõpule viidud SQL-laused. Saate lisada mitu sündmust, lisades täiendavaid ADD EVENT-klausleid.

5.2.3 Sündmuste toimingute seadistamine

Toimingud koguvad iga sündmuse kohta lisakonteksti. Lisage toimingud sulgudesse pärast sündmuse nime:

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

See näide jäädvustab iga lõpule viidud lause SQL-teksti, andmebaasi nime ja kasutajanime.

5.2.4 Sündmuste predikaatide määramine (WHERE-klausel)

Predikaadid filtreerivad sündmusi andmemahu vähendamiseks. Kasutage sündmuse definitsioonis WHERE-klauslit:

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

See filtreerib lauseid, mille kestus on pikem kui 5 sekundit (5 000 000 mikrosekundit).

5.3 Ürituse sihtmärkide lisamine

Sihtmärgid määravad, kuhu sündmuste andmeid salvestatakse ja kuidas neid töödeldakse.

5.3.1 Lisa sihtmärgi süntaks

Pärast kõigi sündmuste määratlemist lisage sihtmärgid ADD TARGET klausli abil:

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

Eesliide package0 näitab, et sihtmärk pärineb baaspaketist.

5.3.2 Sihtparameetrite seadistamine

Iga sihtmärgi tüüp aktsepteerib spetsiifilisi parameetreid. Event_file jaoks seadista filename, max_file_size ja max_rollover_files:

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

See konfiguratsioon loob kuni 50 MB suuruseid faile, säilitades ülekandmise teel kuni 5 faili.

5.4 Seansi valikud ja sätted

WITH-klausel konfigureerib seansi tasemel valikuid, mis kontrollivad käitumist ja ressursikasutust.

5.4.1 MAX_MEMORY ja EVENT_RETENTION_MODE

Mälu eraldamise ja sündmuste käitlemise juhtimine surve all:

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

EVENT_RETENTION_MODE valikute hulka kuuluvad ALLOW_SINGLE_EVENT_LOSS minimaalse mälukasutuse jaoks, ALLOW_MULTIPLE_EVENT_LOSS mõõduka üldkulu jaoks ja NO_EVENT_LOSS täieliku andmete säilitamise jaoks potentsiaalse jõudlusmõju hinnaga.

5.4.2 MAX_DISPATCH_LATENCY

Määrake maksimaalne aeg, mille jooksul sündmused võivad puhvrites püsida enne sihtmärkidele kirjutamist:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Madalamad väärtused pakuvad rohkem reaalajas andmeid suurenenud sisend-/väljundoperatsioonide hinnaga.

5.4.3 MÄLU_OSA_REŽIIM

Mälu partitsioonimise optimeerimine riistvarakonfiguratsiooni jaoks:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Valikud hõlmavad NONE ühe partitsiooni jaoks, PER_NODE NUMA süsteemide jaoks ja PER_CPU maksimaalse samaaegsuse saavutamiseks mitme protsessoriga süsteemides.

5.5 Seansside alustamine, peatamine ja muutmine

Seansi oleku ja konfiguratsiooni haldamine ALTER EVENT SESSION lausete abil.

5.5.1 SÜNDMUSE SESSIOONI MUUTMINE käivitamiseks/peatamiseks

Alusta seanssi pärast loomist:

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

Jooksva seansi peatamine:

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

5.5.2 Olemasolevate seansside muutmine

Muuda seansi konfiguratsiooni peatatud olekus. Lisa sündmused:

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

Eemalda sündmused:

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

5.5.3 Sündmuste seansside kustutamine

Seansi täielik eemaldamine käsuga DROP EVENT SESSION:

DROP EVENT SESSION [SampleSession] ON SERVER;

Enne maha võtmist tuleb seanss peatada.

6. Ürituste sihtmärkidega töötamine üksikasjalikult

6.1 event_file Sihtkoha konfiguratsioon

Sihtmärk event_file pakub sündmuste andmete püsivat salvestusruumi paindlike konfiguratsioonivõimalustega.

6.1.1 Faili tee ja nimetamise konventsioonid

Määrake sündmusfailide täielik tee ja failinimi:

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

Laiendatud sündmuste logifailide jaoks kasutage .xel-laiendit. Veenduge, et SQL Server Teenusekontol on kirjutamisõigused määratud kataloogi.

6.1.2 Failide ümberpaigutamine ja suuruse haldamine

Kettaruumi haldamiseks konfigureerige automaatne failide ümberpaigutamine:

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

Kui faili suurus ulatub 50 MB-ni, SQL Server Laiendatud sündmuste funktsioon loob uue faili, mille järelliide on suurendatud. Pärast 10 failini jõudmist kirjutatakse vanim fail üle.

6.1.3 Sündmuste failiandmete lugemine

Päri sündmuste faili andmeid funktsiooni sys.fn_xe_file_target_read_file abil:

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

Metamärkide muster loeb kõik seansiga seotud failid.

6.2 ring_bufferi sihtmärgi kasutamine

ring_bufferi sihtmärk salvestab sündmused mällu, et pääseda kiiresti juurde hiljutistele tegevustele.

6.2.1 Mälupõhine sündmuste salvestamine

Mälupõhise salvestusruumi jaoks seadista ring_buffer:

ADD TARGET package0.ring_buffer

Sündmused jäävad ligipääsetavaks ainult siis, kui seanss on aktiivne ja SQL Server töötab. Andmed lähevad kaotsi, kui seanss peatub või server taaskäivitub.

6.2.2 Puhvri suurus ja konfiguratsioon

Rõngaspuhvri mälu eraldamise juhtimine:

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

Määrake mälumaht kilobaitides. Kui puhver täitub, kustutatakse vanemad sündmused FIFO meetodil.

6.2.3 Rõngaspuhvri andmete päringu esitamine

Juurdepääs rõngaspuhvri andmetele DMV-de kaudu:

SELECT
    CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
    AND t.target_name = 'ring_buffer';

Target_data sisaldab XML-vormingus sündmuse teavet.

6.3 sündmuste_loenduri sihtmärk

event_counter sihtmärk pakub lihtsat lugemist ilma detailse andmesalvestuseta:

ADD TARGET package0.event_counter

See sihtmärk jälgib sündmuste sagedust minimaalse üldkuluga, mis on kasulik suuremahuliseks jälgimiseks, kus ainult loendatud arvud on olulised.

6.4 histogrammi sihtmärk

Histogramm rühmitab sündmused väljaväärtuste järgi:

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

See konfiguratsioon loob histogrammi, mis näitab sündmuste jaotust andmebaasides.

6.5 paari sobitamise sihtmärk

Pair_matching sihtmärk seostab seotud sündmusi, näiteks lukkude omandamist, vabastamistega:

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

See võimaldab analüüsida paarisoperatsioone ja nende kestust.

7. Laiendatud sündmuste andmete vaatamine ja analüüsimine

7.1 SSMS-i kasutamine reaalajas andmete vaatamiseks

SQL Server Management Studio pakub graafilist liidest laiendatud sündmuste andmete reaalajas vaatamiseks:

  1. Objektihalduris laiendage juhtimine -> Laiendatud sündmused -> Seansid.
  2. Paremklõpsake aktiivsel seansil.
  3. valima Otseülekande andmed reaalajas andmete vaaturi avamiseks.
    Vaadake laiendatud sündmuste seansi otseülekandeid SQL Server Juhtimisstuudio.
  4. Sündmused kuvatakse ruudustikus vastavalt nende toimumisele.
  5. Üksikasjalike väljaväärtuste kuvamiseks üksikasjade paanil klõpsake üksikutel sündmustel.
    Vaadake sündmuste otseülekandeid, sealhulgas sündmuse üksikasju.
  6. Kasutage tööriistariba filtreid, et keskenduda kindlatele sündmuste tüüpidele või väljaväärtustele.

7.2 Sündmuste failiandmete päringud T-SQL-iga

T-SQL päringud pakuvad jäädvustatud sündmuste andmete paindlikku analüüsi.

7.2.1 sys.fn_xe_file_target_read_file funktsioon

Loe sündmuste faili andmeid selle süsteemifunktsiooni abil:

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

Funktsioon tagastab iga sündmuse kohta ühe rea XML-vormingus üksikasjadega.

7.2.2 XML-sündmuste andmete parsimine

XML-sündmuse andmetest konkreetsete väärtuste ekstraheerimine:

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 avaldised ekstraheerivad XML-struktuurist üksikud väljaväärtused.

7.2.3 Sündmuste andmete teisendamine tabeliteks

Loo sündmuste andmetest struktureeritud tulemuste komplekte:

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 Rõngaspuhvri andmete päringu esitamine

Andmete ekstraheerimine ring_bufferi sihtmärkidest:

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 Süsteemivaated laiendatud sündmuste jaoks

SQL Server pakub mitmeid DMV-sid ja kataloogivaateid laiendatud sündmuste seansside haldamiseks ja jälgimiseks.

7.4.1 sys.server_event_sessions

Serveris talletatud seansi definitsioonide kuvamine:

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

See kataloogivaade kuvab kõigi määratletud seansside konfiguratsiooniandmeid.

7.4.2 sys.dm_xe_sessions

Kuva hetkel aktiivsed sessioonid:

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

See DMV annab käitusaja teavet aktiivsete laiendatud sündmuste seansside kohta.

7.4.3 sys.dm_xe_session_targets

Kuva aktiivsete seanssidega seotud eesmärgid:

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 Muud kasulikud DMV-d

Lisavaated pakuvad seansi kohta põhjalikku teavet:

  • sys.dm_xe_session_events: Loetleb aktiivsete seansside sündmused
  • sys.dm_xe_session_event_actions: Näitab seansi sündmuste jaoks konfigureeritud toiminguid
  • sys.dm_xe_objects: Kataloogib kõik saadaolevad sündmused, toimingud ja sihtmärgid
  • sys.dm_xe_object_columns: Iga sündmusetüübi jaoks saadaolevad detailväljad
  • sys.dm_xe_packages: Loetleb kõik laiendatud sündmuste paketid

8. Praktilised kasutusjuhud ja näited

8.1 SQL-lause täitmise jälgimine

SQL-lause täitmise jälgimine annab ülevaate päringumustritest ja jõudlusnäitajatest.

8.1.1 sql_statement_completed sündmuste jälgimine

Looge seanss lõpetatud SQL-lausete jälgimiseks:

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 Filtreerimine andmebaasi või rakenduse järgi

Keskenduge predikaatide abil konkreetsetele andmebaasidele või rakendustele:

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 Pattiseisu teabe jäädvustamine

Pattiseisu analüüs nõuab vastuoluliste tehingute kohta üksikasjaliku teabe kogumist.

8.2.1 xml_deadlock_report sündmus

Loo seanss täielike ummikseisu graafikute jäädvustamiseks:

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 Ummikdiagrammide analüüsimine

Pattiseisu teabe ekstraheerimine ja analüüsimine:

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

Pattiseisu graafik sisaldab üksikasju protsesside, ressursside ja ohvrite valiku kohta.

8.3 Päringu jõudlusprobleemide jälgimine

Tuvastage halvasti toimivad päringud kestuse ja ressursitarbimise mõõdikute abil.

8.3.1 Pikaajaliste päringute tuvastamine

Jäädvusta päringud, mis ületavad teatud kestusläve:

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 Teostuskava analüüs

Päringuplaanide jäädvustamine jõudlusanalüüsi jaoks:

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 Sisselogimise ja turvasündmuste jälgimine

Jälgige autentimis- ja autoriseerimistegevusi turvaauditi jaoks.

8.4.1 Sisselogimise õnnestumise ja ebaõnnestumise jälgimine

Jälgige nii edukaid kui ka ebaõnnestunud sisselogimiskatseid:

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 Lubade muudatused

Turvalubade muudatuste jälgimine:

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 Andmebaasi tasemel jälgimine

Jälgige andmebaasipõhiseid toiminguid ja oleku muutusi.

8.5.1 Varundamise ja taastamise sündmused

Varundamise ja taastamise toimingute jälgimine:

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 Andmebaasi oleku muudatused

Andmebaasi oleku üleminekute jälgimine:

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

8.6 Andmebaasi rikkumise ja terviklikkuse probleemide tuvastamine

SQL Server Laiendatud sündmused pakuvad varajase hoiatamise võimalusi võimaliku andmebaasi rikkumise tuvastamiseks, võimaldades ennetavat sekkumist enne probleemide eskaleerumist.

8.6.1 Korruptsiooni avastamise võtmesündmused

Mitmed sündmused viitavad võimalikule korruptsioonile või I/O probleemidele.

8.6.1.1 error_reported kriitiliste vigade sündmus

Sündmus error_reported hõlmab kõiki SQL Server vead, sh korruptsiooniga seotud veanumbrid:

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

Viga 823 näitab sisend-/väljundvigu, viga 824 annab märku loogilise järjepidevuse vigadest ja viga 825 annab teada lugemis- ja uuestikatsete õnnestumisest, mis võib viidata riistvaraprobleemidele.

8.6.1.2 database_uspect_data_page sündmus

See sündmus käivitub, kui SQL Server kahtlase lehega kokku puutub:

ADD EVENT sqlserver.database_suspect_data_page

Kahtlased lehed viitavad võimalikule rikkumisele ja need salvestatakse tabelisse msdb.dbo.suspect_pages.

8.6.1.3 errorlog_written Sündmus

Jäädvusta kirjed, mis on kirjutatud SQL Server vealogi:

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

8.6.2 Korruptsiooni jälgimise seansi loomine

Korruptsiooni avastamise ja jälgimise põhjaliku sessiooni loomine.

8.6.2.1 Rikutud veanumbrite filtreerimine (823, 824, 825)

Looge korruptsiooninäitajatele keskenduv sihipärane sessioon:

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 Sobivate raskusastmete määramine

Lisage tõsised vead, mis võivad viidata korruptsioonile:

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

Raskusaste 20 ja kõrgem viitab süsteemi tasemel probleemidele, mis on sageli seotud korruptsiooniga.

8.6.2.3 Sündmuste faili sihtmärgi seadistamine teadete jaoks

Salvesta korruptsioonijuhtumeid analüüsimiseks ja hoiatamiseks:

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 Korruptsioonijuhtumite andmete analüüsimine

Kogutud andmetest korruptsiooniga seotud sündmuste eraldamine ja tõlgendamine.

8.6.3.1 Kahtlaste lehtede tuvastamine

Päring database_suspect_data_page sündmuste kohta:

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 Vea üksikasjade ja konteksti hankimine

Analüüsige error_reported sündmusi korruptsioonimustrite osas:

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 Integratsioon DBCC CHECKDB-ga

Kasutage juhendamiseks laiendatud sündmuste andmeid DBCC CHECKDB hukkamine.

8.6.4.1 DBCC CHECKDB käivitamine sündmuste põhjal

Kui tuvastatakse rikkejuhtumeid, käivitage põhjalikuks valideerimiseks DBCC CHECKDB:

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

Laiendatud sündmused pakuvad varajast hoiatust, samas kui DBCC CHECKDB teostab põhjalikku valideerimist.

8.6.4.2 Automatiseeritud korruptsioonivastase võitluse töövood

Rakenda automaatseid vastuseid sündmuste faili jälgides:

  1. Seadistamine SQL Server Agendi ülesanne perioodiliselt päringuid teha rikke jälgimise sündmuste faili kohta.
  2. Kui leitakse rikkejuhtumeid, käivitage kahjustatud andmebaasis DBCC CHECKDB.
  3. Saatke andmebaasi halduritele meiliteateid sündmuste üksikasjade ja DBCC CHECKDB tulemustega.
  4. Logige leiud trendianalüüsi jaoks tsentraliseeritud jälgimistabelisse.
8.6.4.3 Ennetava jälgimise ja jõudluse tasakaalustamine

Laiendatud sündmused pakuvad väikese üldkuluga korruptsiooni tuvastamist võrreldes sagedase DBCC CHECKDB käivitamisega:

  • Käivita laiendatud sündmusi pidevalt reaalajas korruptsiooni tuvastamiseks
  • Käivita DBCC CHECKDB ainult siis, kui ilmuvad rikkeindikaatorid
  • Planeeri regulaarne DBCC CHECKDB hooldusakende ajal
  • Kasutage laiendatud sündmusi, et tuvastada, millised andmebaasid vajavad kohest tähelepanu

See lähenemisviis pakub ennetavat jälgimist ilma pidevate terviklikkuse kontrollide olulise ressursikuluta.

8.6.4.4 Rikutud andmebaasi parandamine

Kui andmebaasis tuvastatakse vigu, saate DBCC CHECKDB abil parandada väiksemaid vigu. Kui see ebaõnnestub, võite proovida kolmanda osapoole abi. SQL-andmebaasi taastamise tööriist, mis pakub üldiselt kõrgemat taastamismäära tõsiselt rikutud andmebaaside puhul.

9. Serveri ulatusega vs andmebaasi ulatusega laiendatud sündmused

9.1 Serveri ulatusega sündmuste seansid

Serveri ulatusega seansid jälgivad tegevust kogu ulatuses SQL Server eksemplar. Need seansid luuakse klausliga ON SERVER ja need jäävad põhiandmebaasisse alles.

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

Serveri ulatusega seansid jäädvustavad sündmusi kõigist andmebaasidest ja sobivad eksemplari tasemel jälgimiseks.

9.2 Andmebaasi ulatusega sündmuste seansid (Azure'i SQL-andmebaas)

Andmebaasi ulatusega seansid on piiratud ühe andmebaasiga ja neid kasutatakse peamiselt Azure SQL-andmebaasis, kus serveritaseme juurdepääs on piiratud:

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

Azure'i SQL-andmebaasis salvestatakse sündmuste failid Azure'i blob-salvestusruumi, mitte kohalikesse failisüsteemidesse.

9.3 Erinevused ja kasutusjuhud

Serveri ulatusega seansid pakuvad põhjalikku jälgimist kõigis andmebaasides, kuid nõuavad kõrgendatud õigusi. Andmebaasi ulatusega seansid pakuvad isolatsiooni ja sobivad konkreetsete rakenduste või rentnike jälgimiseks.

Kasutage serveripoolseid seansse tsentraliseeritud jälgimiseks, andmebaaside jõudluse tõrkeotsinguks ja turbeauditeerimiseks. Kasutage andmebaasipoolseid seansse Azure'i SQL-andmebaasis, mitme üürnikuga keskkondades või jälgimiskohustuste delegeerimisel rakendusmeeskondadele.

10. Laiendatud sündmused Azure'i SQL-andmebaasis

10.1 Azure'i-spetsiifilised kaalutlused

Azure'i SQL-andmebaas rakendab laiendatud sündmusi mõningate erinevustega kohapealsest lahendusest SQL ServerSeansid on vaikimisi andmebaasipõhised ja sündmuste failide salvestamiseks kasutatakse kohalike failisüsteemide asemel Azure Blob Storage'i.

Azure Blob Storage'i autentimiseks on vaja sündmusefaili sihtmärgis konfigureeritud SAS-tokenit. Ühendusstringid viitavad salvestuskontole ja konteinerile, kuhu sündmusefailid salvestatakse.

10.2 Azure'is saadaolevad sihtmärgid

Azure'i SQL-andmebaas toetab neid laiendatud sündmuste sihtmärke:

  • event_file: Kirjutab Azure Blob Storage'i
  • ring_buffer: Mälupõhine salvestusruum, millel on sama käitumine nagu kohapealsel salvestusruumil
  • event_counter: Loendab sündmuste esinemisi

Sihtmärk event_file nõuab konfigureerimist Azure Blob Storage'i identimisteabega:

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

10.3 Andmebaasiulatuslike seansside loomine

Looge seanss Azure'i SQL-andmebaasis:

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;

Azure'i andmebaasipõhised seansid toimivad sarnaselt serveripõhiste kohapealsete seanssidega, kuid ulatus on piiratud praeguse andmebaasiga.

11. Parimad tavad ja jõudluse optimeerimine

11.1 Jõudlusele avalduva mõju minimeerimine

Laiendatud sündmused on loodud minimaalse üldkulu saavutamiseks, kuid vale konfigureerimine võib jõudlust mõjutada. Järgige neid juhiseid:

  • Kasutage sündmuste filtreerimiseks konkreetseid predikaate, selle asemel et jäädvustada kõike
  • Vältige ebavajalike toimingute kogumist, mis lisavad töötlemiskulusid
  • Valige andmete säilitamise vajaduste põhjal sobivad sihtmärgid
  • Määrake mõistlikud puhvri suurused ja saatmise latentsusajad
  • Seansi ressursside tarbimise jälgimine DMV-de abil

11.2 Õigete sündmuste ja filtrite valimine

Valige sündmused, mis on otseselt seotud teie jälgimiseesmärkidega. Vältige suure sagedusega sündmusi, kui see pole hädavajalik, ja rakendage alati predikaate andmemahu vähendamiseks.

Näiteks kõigi sql_statement_completed sündmuste jäädvustamise asemel filtreerige konkreetsete andmebaaside või kestuskünniste järgi:

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

11.3 Sihtmärgi valiku juhised

Valige sihtmärgid vastavalt oma analüüsivajadustele:

  • Kasutage event_file'i üksikasjaliku ajaloolise analüüsi ja pikaajalise säilitamise jaoks
  • Kasutage reaalajas jälgimiseks ring_bufferit minimaalse sisend-/väljundmõjuga
  • Kasuta event_counter'it, kui ainult sagedus on oluline
  • Jaotusanalüüsi jaoks kasutage histogrammi
  • Korreleeritud sündmuste analüüsi jaoks kasutage paaride sobitamise funktsiooni

11.4 Seansi konfiguratsiooni soovitused

Konfigureerige seansid sobivate ressursipiirangutega:

  • Määrake MAX_MEMORY eeldatava sündmuste mahu ja serveri ressursside põhjal
  • Enamiku stsenaariumide korral kasutage minimaalse üldkulu saavutamiseks valikut ALLOW_SINGLE_EVENT_LOSS
  • Reaalajas vajaduste ja jõudluse tasakaalustamiseks määrake MAX_DISPATCH_LATENCY
  • Kasutage PER_CPU mälupartitsiooni mitme protsessoriga süsteemides
  • Väldi STARTUP_STATE=ON, kui pidev jälgimine pole vajalik.

11.5 Sündmuste faili suuruse ja säilitusaja haldamine

Piiramatu ketta kasutamise vältimiseks konfigureerige failide ümberpaigutamine:

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

See konfiguratsioon haldab ligikaudu 1 GB sündmuste andmeid (10 faili × 100 MB). Kohandage vastavalt oma säilitusnõuetele ja saadaolevale salvestusruumile.

12. Pikendatud sündmuste tõrkeotsing

12.1 Levinud probleemid ja lahendused

Levinud pikendatud sündmuste probleemid hõlmavad seansside mittejäädvustamist, jõudluse halvenemist, failisihtmärgi probleeme ja ootamatut seansi käitumist.

12.2 Seanss ei salvesta andmeid

Kui seanss ei jäädvusta oodatud sündmusi:

  1. Veenduge, et seanss on käivitatud, kasutades sys.dm_xe_sessions.
  2. Kontrollige predikaate, et need ei filtreeriks välja kõiki sündmusi.
  3. Sündmuste käivitamise kinnitamiseks eemaldage ajutiselt filtrid.
  4. Vaadake üle õigused, et teil oleks juurdepääs seansi andmete vaatamiseks.
  5. Kontrollige, kas sihtkoha konfiguratsioon on õige ja kirjutatav.
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Jõudluse halvenemine

Kui pikendatud sündmused põhjustavad jõudlusprobleeme:

  1. Sündmuste mahu vähendamiseks lisage predikaadid.
  2. Eemaldage mittevajalikud toimingud, mis koguvad lisaandmeid.
  3. Kirjutamissageduse vähendamiseks suurendage MAX_DISPATCH_LATENCY väärtust.
  4. Muutke EVENT_RETENTION_MODE väärtuseks ALLOW_SINGLE_EVENT_LOSS.
  5. Kõrgsageduslike sündmuste korral kaalu event_file asemel ring_bufferi kasutamist.

12.4 Faili sihtmärgi probleemid

Faili sihtmärgi probleemid on sageli seotud õiguste või kettaruumiga:

  1. Kontrollige SQL Server Teenusekontol on sihtkataloogi kirjutamisõigused.
  2. Veenduge, et kettaruumi oleks piisavalt.
  3. Kontrollige, kas määratud tee on olemas ja sellele pääseb ligi.
  4. Kui failid ei liigu ootuspäraselt, vaadake üle failide ülekande konfiguratsioon.

12.5 Süsteemivaadetega silumine

Kasutage DMV-sid pikendatud sündmuste probleemide diagnoosimiseks:

-- 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. Täpsemad teemad

13.1 Kohandatud ürituste pakettide loomine

Edasijõudnud kasutajad saavad luua kohandatud ürituste pakette, et neid laiendada SQL Server Laiendatud sündmuste funktsionaalsus. See nõuab C++ arendust ja integreerimist SQL Server laiendatavuse raamistik.

Kohandatud paketid võimaldavad jälgida rakendusespetsiifilisi sündmusi või integreerida kolmandate osapoolte jälgimissüsteeme laiendatud sündmuste infrastruktuuriga.

13.2 Ürituste seansi mallid

SSMS pakub sisseehitatud malle levinud jälgimisstsenaariumide jaoks. Mallidele pääseb juurde uute seansside loomisel viisardi kaudu:

  1. Klõpsake dialoogiboksis Uus seanss nuppu Šabloon rippmenüüst.
  2. Valige saadaolevate mallide hulgast, näiteks Päringu üksikasjade jälgimine või Süsteemi tervis.
  3. Muutke malli vastavalt oma konkreetsetele vajadustele.

13.3 Integreerimine jälgimislahendustega

Laiendatud sündmuste andmed saavad toita ettevõtte jälgimislahendusi:

  • Ekspordi sündmuste andmed tsentraliseeritud logimissüsteemidesse
  • Sündmuste failide parsimine ja andmete laadimine jälgimisandmebaasidesse
  • Looge kohandatud armatuurlaudu BI-tööriistade abil
  • Käivitage hoiatused konkreetsete sündmuste mustrite põhjal
  • Vastavad SQL Server sündmused rakenduse ja infrastruktuuri mõõdikutega

13.4 Automatiseerimine ja ajastamine

Laiendatud sündmuste haldamise automatiseerimine, kasutades SQL Server Agent:

  • Loo töid seansside alustamiseks/peatamiseks kindlatel ajavahemikel
  • Sündmuste failide analüüsi ja aruandluse ajakava
  • Rakendage andmete säilitamise poliitikaid, arhiveerides või kustutades vanu sündmuste faile
  • Automatiseerige reageerimine tuvastatud tingimustele, näiteks jõudlusprobleemidele või turvasündmustele

14. Ränne asukohast SQL Server Profiler

14.1 SQL Server Profileri sündmuste ja laiendatud sündmuste kaardistamine

Microsoft pakub kaardistamist SQL Server Profiler sündmused ja laiendatud sündmused. Levinud vastendused on järgmised:

  • SQL:BatchCompleted -> sql_batch_completed
  • SQL:Partii käivitamine -> sql_batch_käivitamine
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_avalduse_starting
  • Ummikseisu graafik -> xml_deadlock_report
  • Auditi sisselogimine -> sisselogimine
  • Auditi väljalogimine -> logi välja

14.2 Jäljedefinitsioonide teisendamine

Teisenda olemasolev SQL Server Profiler jälgib laiendatud sündmuste seansse, tuvastades samaväärsed sündmused ja konfigureerides sobivad predikatid. SSMS pakub abi levinud konversioonide puhul.

Vaadake jälgimisfiltrid üle ja teisendage need laiendatud sündmuste predikaatideks. Laiendatud sündmuste toimingud asendavad jälgimisveerud allikast SQL Server Profileerija.

14.3 Toimivuse võrdlus

Pikendatud sündmused pakuvad oluliselt paremat jõudlust kui SQL Server Profiler. Võrdlusuuringud näitavad, et pikendatud sündmused tarbivad vähem protsessori tsükleid ja mõjutavad tehingute läbilaskevõimet vähem.

Laiendatud sündmused kasutavad asünkroonset töötlemist ja optimeeritud mäluhaldust, samas kui SQL Server Profiler tugineb sünkroonsele sündmuste jäädvustusele, mis blokeerib tegevused kuni jälgimise töötlemise lõpuni.

15. järeldus

15.1 Põhimõistete kokkuvõte

SQL Server Laiendatud sündmused pakuvad võimsat ja kerget raamistikku jälgimiseks ja tõrkeotsinguks SQL ServerArhitektuur koosneb sündmustest, toimingutest, predikaatidest, sihtmärkidest ja seanssidest, mis töötavad koos asjakohase serveritegevuse jäädvustamiseks.

Seansse saab luua SSMS-i või T-SQL-i abil, mis pakub paindlikkust nii ad-hoc tõrkeotsinguks kui ka automatiseeritud jälgimiseks. Mitmed sihtmärgitüübid toetavad erinevaid analüüsimeetodeid, alates reaalajas jälgimisest ring_bufferiga kuni ajaloolise analüüsini event_file'iga.

Laiendatud sündmused pakuvad paremat jõudlust võrreldes SQL Server Profiler, pakkudes samal ajal ulatuslikumaid jälgimisvõimalusi. Süsteem võimaldab andmebaasi administraatoritel ja arendajatel diagnoosida probleeme, optimeerida jõudlust, parandada turvalisust ja säilitada vastavust.

15.2 Järgmised sammud ja lisaressursid

Oma edasiseks arendamiseks SQL Server XEventsi asjatundlikkus:

  • Rakenda laiendatud sündmusi testimiskeskkondades, et saada praktilist kogemust
  • Täielike sündmuste kataloogide ja üksikasjaliku süntaksiviite saamiseks vaadake Microsofti dokumentatsiooni.
  • Liitu SQL Server kogukonnafoorumid, kus õppida teiste kogemustest
  • Avastage täiustatud stsenaariume, nagu kohandatud paketid ja integratsioon jälgimisplatvormidega
  • Levinud jälgimisstsenaariumide jaoks seansimallide kogu loomine

16 KKK jaotis

K: Mis on SQL Server Pikendatud sündmused?

A: SQL Server Extended Events on kerge jõudluse jälgimise süsteem, mis on integreeritud SQL Server Andmebaasimootor, mis jäädvustab serveri toimingute kohta üksikasjalikku teavet minimaalse üldkuluga.

K: Mille poolest erinevad pikendatud sündmused teistest? SQL Server Profileerija?

A: Laiendatud sündmused pakuvad paremat jõudlust, väiksemat üldkulu ja paindlikumat konfiguratsiooni kui SQL Server Profileerija. SQL Server Profiler on aegunud ja Microsoft soovitab kõigi jälgimisülesannete jaoks kasutada laiendatud sündmusi.

K: Kas pikendatud sündmused võivad mõjutada SQL Server esitus?

V: Kui laiendatud sündmused on õigesti konfigureeritud koos sobivate predikaatide ja ressursipiirangutega, on neil minimaalne mõju jõudlusele. Halb konfiguratsioon ilma filtreerimiseta võib jõudlust mõjutada.

K: Milliseid õigusi on vaja laiendatud sündmuste seansside loomiseks?

A: Serveri ulatusega seansside jaoks on vaja luba „Muuda mis tahes sündmust seanss” või andmebaasi ulatusega seansside jaoks luba „Juhtida”.

K: Kuidas vaadata laiendatud sündmuste andmeid?

V: Kasutage SQL Server Management Studio reaalajas andmete vaatur, sündmuste failide pärimine sys.fn_xe_file_target_read_file abil või rõngaspuhvri andmete pärimine DMV-de kaudu.

K: Kas laiendatud sündmused saavad tuvastada andmebaasi riknemist?

V: Jah, laiendatud sündmused suudavad jäädvustada riknemisega seotud vigu (823, 824, 825) ja kahtlaseid lehe sündmusi, pakkudes võimalike riknemisprobleemide kohta varajast hoiatust.

K: Mis vahe on sündmustel, toimingutel ja predikaatidel?

A: Sündmused on juhtumid, mida soovite jälgida. Toimingud lisavad jäädvustatud sündmustele täiendavat teavet. Predikaadid filtreerivad sündmusi tingimuste alusel, et vähendada andmemahtu.

K: Kuidas jälgida päringuid konkreetsetest rakendustest või andmebaasidest?

A: Kasutage oma sündmuse konfiguratsioonis predikaate, et filtreerida andmebaasi_nime, kliendi_rakenduse_nime või muude asjakohaste väljade järgi.

K: Milliseid sihtmärke peaksin pikendatud sündmuste jaoks kasutama?

A: Püsiva salvestamise ja ajaloolise analüüsi jaoks kasutage funktsiooni event_file, väikese üldkuluga reaalajas jälgimiseks funktsiooni ring_buffer, lihtsaks sageduse jälgimiseks funktsiooni event_counter ja jaotuse analüüsiks funktsiooni histogramm.

K: Kas Azure'i SQL-andmebaasis on saadaval laiendatud sündmused?

V: Jah, Azure SQL-andmebaas toetab andmebaasi ulatusega laiendatud sündmusi, mille sündmusefailid on salvestatud Azure Blob Storage'i.

K: Kuidas teha tõrkeotsingut laiendatud sündmuste seansi puhul, mis andmeid ei kogu?

A: Veenduge, et seanss on käivitatud, kontrollige, et predikaadid ei filtreeriks kõiki sündmusi, kinnitage sihtkoha konfiguratsioon ja vaadake õigused üle süsteemi DMV-de abil.

K: Kas ma saan laiendatud sündmuste haldust automatiseerida?

V: Jah, kasuta SQL Server Agendi tööd seansside alustamiseks/peatamiseks, sündmuste failide analüüsimiseks, säilituspoliitikate rakendamiseks ja tuvastatud tingimustele reageerimiseks.

Tehtud tööd


Teave Autor

Yuan Sheng on vanem andmebaasiadministraator (DBA), kellel on üle 10 aasta kogemust SQL Server keskkonnad ja ettevõtte andmebaaside haldus. Ta on edukalt lahendanud sadu andmebaaside taastamise stsenaariume finantsteenuste, tervishoiu ja tootmisorganisatsioonides.

Yuan on spetsialiseerunud SQL Server andmebaasi taastamine, kõrge käideldavuslahendusedja jõudluse optimeerimine. Tema ulatuslik praktiline kogemus hõlmab mitme terabaidise mahuga andmebaaside haldamist, juurutamist Alati sisse lülitatud kättesaadavuse rühmadja automatiseeritud varundus- ja taastestrateegiate väljatöötamine missioonikriitiliste ärisüsteemide jaoks.

Oma tehnilise asjatundlikkuse ja praktilise lähenemise abil keskendub Yuan terviklike juhendite loomisele, mis aitavad andmebaasiadministraatoritel ja IT-spetsialistidel lahendada keerulisi probleeme SQL Server väljakutseid tõhusalt. Ta on kursis uusimate uudistega SQL Server väljalasete ja Microsofti arenevate andmebaasitehnoloogiate põhjal, testides regulaarselt taastestsenaariume, et tagada oma soovituste vastavus reaalsetele parimatele tavadele.

Kas teil on küsimusi SQL Server taastamist või vajate täiendavat andmebaasi tõrkeotsingu juhendamist? Yuan tervitab tagasisidet ja ettepanekuid nende tehniliste ressursside täiustamiseks.