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.
- avatud SQL Server Management Studio ja loo ühendus oma SQL Server Näiteks
- Objektihalduris laiendage juhtimine -> Laiendatud sündmused.
- Laiendatud sündmuste sõlm sisaldab Seansid ja Paketid kaustad jälgimiskonfiguratsioonide haldamiseks.
4.3 Uue seansi loomine
Uue seansi loomiseks:
-
- Paremklõpsake nuppu Seansid kausta all Laiendatud sündmused.
- valima Uus seanss konfiguratsioonidialoogi avamiseks. Järgnev sisu kasutab seda meetodit uue seansi loomiseks.
Märkus: Uue seansi viisard on saadaval ka giidiga kogemuse saamiseks.
4.3.1 Üldine lehe konfiguratsioon
Kohta Üldine lehel seadistage seansi põhiomadused:
- Sisestage seansi nimi väljale Seansi nimi väli. Kasutage kirjeldavaid nimetusi, mis viitavad jälgimise eesmärgile.
- Valikuliselt valige Alusta sündmuse seanssi serveri käivitamisel automaatse seansi aktiveerimise lubamiseks.
- Vaikimisi seansi mall on TühiEelnevalt määratletud konfiguratsiooni kasutamisel võite kasutada ka teisi malle.
4.3.2 Sündmuste lehe seadistamine
. Sündmused leht võimaldab teil valida, milliseid sündmusi jälgida:
- Valige Sündmused leht vasakult Valige leht paneeli.
- aasta Ürituste kogu, sirvi saadaolevaid sündmusi või kasuta otsingufunktsiooni.
- Asjakohaste sündmuste leidmiseks filtreerige sündmusi märksõnade (nt „sql_statement_completed”) abil.
- Valige soovitud sündmus, näiteks sql_statement_completed.
- Sündmuse teisaldamiseks klõpsake parempoolset noolenuppu. Valitud sündmused nimekiri.
4.3.3 Andmesalvestuse konfiguratsioon
. Data Storage leht määratleb, kuhu sündmuste andmed salvestatakse:
- Valige Data Storage leht vasakult Valige leht paneeli.
- aasta Sihid valige rippmenüüst sihtmärgi tüüp.
(1) sündmuse_fail Sihtmärk
Sihtmärk event_file salvestab andmed kettafailidele laiendiga .xel:
- valima sündmuse_fail sihtmärgi tüübi rippmenüüst.
- Määrake faili tee, näiteks C:\temp\YourSession_Target.xel.
- Konfigureerige kettaruumi haldamiseks ümberpaigutamise valikud, määrates maksimaalse failisuuruse ja failide arvu.
- Sihtmärk kirjutab sündmusi pidevalt, kuni seanss peatub või salvestuslimiit on saavutatud.
(2) ring_bufferi sihtmärk
ring_buffer sihtmärk salvestab sündmused mällu kiireks juurdepääsuks ilma ketta sisend-/väljundfunktsioonita:
- valima ring_buffer sihttüübina.
- Konfigureerige puhvri maksimaalne mälumaht.
- Arvestage sellega, et vanemad sündmused kustutatakse puhvri täitumisel, mistõttu sobib see hiljutise tegevuse jälgimiseks.
(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.
(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.
(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.
4.3.4 Lisaseaded
. edasijõudnud leht pakub seansi tasemel konfiguratsioonivalikuid:
- Valige edasijõudnud leht vasakult Valige leht paneeli.
- Seadistamine Sündmuste säilitamise režiim et kontrollida sündmuste käsitlemist mälu surve all.
- komplekt Maksimaalne lähetuse latentsus reaalajas töötlemise ja süsteemi jõudluse tasakaalustamiseks.
- Seadistamine Maksimaalne mälumaht ja Maksimaalne sündmuse suurus teie jälgimisvajaduste põhjal.
- valima Mälupartitsiooni režiim ühe või mitme protsessoriga keskkondade optimeerimiseks.
4.4 Sündmuste filtrite (predikaatide) seadistamine
Predikaadid vähendavad andmemahtu, filtreerides sündmusi kindlate kriteeriumide alusel. Filtrite konfigureerimiseks toimige järgmiselt.
- Kohta Sündmused Valige lehelt filtreeritav sündmus, näiteks „sql_statement_completed”.
- Click Seadistamine sündmuse konfiguratsioonidialoogi avamiseks.
- Valige Filter (predikaat) Tab.
- aasta Väli rippmenüüst valige filtreerimiseks väli, näiteks kestus.
- Valige a operaator, näiteks „>”.
- Sisestage filter Väärtus, näiteks 1000000 (1 sekund).
- Vajadusel lisa rohkem tingimusi.
4.5 Toimingute ja sündmuste väljade valimine
Iga sündmuse puhul saate valida kogutavad andmed:
- Kohta Sündmused Valige lehel sündmus, mille jaoks soovite andmed valida, näiteks „sql_statement_completed”.
- Click Seadistamine sündmuse konfiguratsioonidialoogi avamiseks.
- Valige Globaalsed väljad (toimingud) Tab.
- Valige toimingud lisateabe (nt andmebaasi_nimi või kliendi_rakenduse_nimi) lisamiseks.
- Vaadake üle Sündmuste väljad jaotises, et näha, millised väljad automaatselt jäädvustatakse.
- Andmemahu vähendamiseks tühjendage kõik mittevajalikud väljad.
4.6 Seansside alustamine ja haldamine
Pärast seansi seadistamist saate selle käivitada ja selle toimimist jälgida:
- Click OK seansi loomiseks.
- Objektihalduris laiendage Seansid kausta, et näha oma uut seanssi.
- Paremklõpsake seansi nimel ja valige Alusta seanssi sündmuste jäädvustamist alustama.
- Reaalajas andmete vaatamiseks paremklõpsake seansil ja valige Otseülekande andmed.
- 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:
- Objektihalduris laiendage juhtimine -> Laiendatud sündmused -> Seansid.
- Paremklõpsake aktiivsel seansil.
- valima Otseülekande andmed reaalajas andmete vaaturi avamiseks.
- Sündmused kuvatakse ruudustikus vastavalt nende toimumisele.
- Üksikasjalike väljaväärtuste kuvamiseks üksikasjade paanil klõpsake üksikutel sündmustel.
- 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:
- Seadistamine SQL Server Agendi ülesanne perioodiliselt päringuid teha rikke jälgimise sündmuste faili kohta.
- Kui leitakse rikkejuhtumeid, käivitage kahjustatud andmebaasis DBCC CHECKDB.
- Saatke andmebaasi halduritele meiliteateid sündmuste üksikasjade ja DBCC CHECKDB tulemustega.
- 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:
- Veenduge, et seanss on käivitatud, kasutades sys.dm_xe_sessions.
- Kontrollige predikaate, et need ei filtreeriks välja kõiki sündmusi.
- Sündmuste käivitamise kinnitamiseks eemaldage ajutiselt filtrid.
- Vaadake üle õigused, et teil oleks juurdepääs seansi andmete vaatamiseks.
- 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:
- Sündmuste mahu vähendamiseks lisage predikaadid.
- Eemaldage mittevajalikud toimingud, mis koguvad lisaandmeid.
- Kirjutamissageduse vähendamiseks suurendage MAX_DISPATCH_LATENCY väärtust.
- Muutke EVENT_RETENTION_MODE väärtuseks ALLOW_SINGLE_EVENT_LOSS.
- 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:
- Kontrollige SQL Server Teenusekontol on sihtkataloogi kirjutamisõigused.
- Veenduge, et kettaruumi oleks piisavalt.
- Kontrollige, kas määratud tee on olemas ja sellele pääseb ligi.
- 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:
- Klõpsake dialoogiboksis Uus seanss nuppu Šabloon rippmenüüst.
- Valige saadaolevate mallide hulgast, näiteks Päringu üksikasjade jälgimine või Süsteemi tervis.
- 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
- Kiirjuhend: laiendatud sündmused SQL Server – Microsoft Learn
- Laiendatud sündmuste ülevaade – Microsoft Learn
- SQL Server Pikendatud ürituste sessioonid – Microsoft Learn
- Pikendatud sündmuste eesmärgid SQL Server – Microsoft Learn
- SQL Server Laiendatud sündmuste mootor – Microsoft Learn
- SQL Server Profileerija: täielik juhend
- DBCC CHECKDB: täielik juhend
- DataNumen SQL Recovery
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.

















