Skupna raba zdaj:
Kazalo skrij
8. Praktični primeri uporabe in zgledi

1. Predstavitev

1.1 Kaj so SQL Server Razširjeni dogodki?

SQL Server Razširjeni dogodki (Extended Events) so lahki sistemi za spremljanje delovanja, ki skrbnikom in razvijalcem omogočajo zbiranje in analizo podrobnih podatkov o dejavnosti strežnika. Ta sistem je integriran v SQL Server Database Engine in ponuja celovit vpogled v običajno delovanje in scenarije odpravljanja težav.

1.2 Zakaj uporabljati razširjene dogodke za spremljanje?

SQL Server Razširjeni dogodki ponujajo več prepričljivih prednosti za spremljanje in odpravljanje težav z bazami podatkov:

  • Minimalen vpliv na zmogljivost z lahko arhitekturo
  • Podroben nadzor nad zbiranjem podatkov in filtriranjem dogodkov
  • Prilagodljivo zbiranje podatkov, prilagojeno specifičnim potrebam spremljanja
  • Zmožnost hkratnega zajemanja dogodkov iz več paketov
  • Prilagodljive možnosti filtriranja za osredotočanje na ustrezne operacije
  • Podpora za spremljanje produkcijskega sistema brez poslabšanja uporabniške izkušnje
  • Celovito sledenje meritev uspešnosti
  • Napredne diagnostične zmogljivosti za odpravljanje težav
  • Vzdrževanje revizijske sledi za zahteve glede skladnosti
  • Možnosti analize podatkov v realnem času in zgodovinskih podatkov

1.3 Razširjeni dogodki v primerjavi z SQL Server Profil

Medtem ko je SQL Server Profil Čeprav je bilo orodje za spremljanje tradicionalno, ponuja MS SQL Extended Events učinkovitejšo alternativo. Razširjeni dogodki porabijo manj sistemskih virov in ponujajo boljšo skalabilnost za produkcijska okolja.

SQL Server Profiler je zdaj zastarel in Microsoft priporoča selitev na razširjene dogodke za vse dejavnosti spremljanja.

2. Razumevanje arhitekture razširjenih dogodkov

2.1 Komponente mehanizma razširjenih dogodkov

Mehanizem razširjenih dogodkov je sestavljen iz več ključnih komponent, ki skupaj zajemajo, obdelujejo in shranjujejo podatke o dogodkih. Razumevanje teh komponent vam pomaga pri oblikovanju učinkovitih rešitev za spremljanje.

  • Dispečer: Komponenta dispečerja usklajuje tok dogodkov od virov dogodkov do mehanizma razširjenih dogodkov. Ko se dogodek sproži, dispečer prejme obvestilo in ga usmeri v aktivne seje, ki so naročene na to specifično vrsto dogodka.
  • Buffer: Medpomnilniki začasno shranijo podatke o dogodkih v pomnilnik, preden jih zapišejo v cilje. Ta mehanizem medpomnilnika izboljša zmogljivost z zmanjšanjem števila vhodno/izhodnih operacij. Velikost medpomnilnika in nastavitve upravljanja je mogoče konfigurirati tako, da se poraba pomnilnika uravnoteži z zahtevami po zajemanju podatkov.
  • Seja: Seja določa obseg spremljanja dogodkov. Določa, katere dogodke je treba zajeti, katera dejanja je treba izvesti, katere predikate je treba uporabiti in kam shraniti rezultate. Seje je mogoče ustvarjati, spreminjati, zagnati in ustavljati neodvisno.
  • Ciljni primerek: Ciljni primerki predstavljajo destinacije za shranjevanje zajetih podatkov o dogodkih. Vsaka seja lahko zapisuje v enega ali več ciljev, kot so datoteke, obročni medpomnilniki ali števci. Cilji obdelujejo in shranjujejo informacije o dogodkih za kasnejšo analizo.

2.2 Paketi dogodkov

SQL Server Razširjeni dogodki organizirajo funkcionalnost v pakete. Vsak paket vsebuje povezane dogodke, dejanja, tipe, predikate in cilje. Med pogoste pakete spadajo sqlserver, sqlos in package0.

  • Paket sqlserver zagotavlja dogodke, specifične za bazo podatkov, kot so poizvedbe in transakcije.
  • Paket sqlos vsebuje dogodke operacijskega sistema.
  • Paket0 ponuja splošno funkcionalnost, ki se uporablja v vseh paketih.

2.3 Vrste dogodkov in polja

Dogodki predstavljajo dogodke znotraj SQL Server ki jih želite spremljati. Vsaka vrsta dogodka ima vnaprej določena polja, ki zajemajo ustrezne informacije. Na primer, dogodek sql_statement_completed vključuje polja za trajanje, čas procesorja, branje in pisanje.

Dogodki so lahko sinhroni ali asinhroni. Sinhroni dogodki se sprožijo med samo operacijo, asinhroni dogodki pa se sprožijo po zaključku. Razumevanje značilnosti dogodkov vam pomaga izbrati ustrezne dogodke za vaše potrebe spremljanja.

2.4 Dejanja

Dejanja dodajo dodatne informacije zajetim dogodkom. Ko se dogodek sproži, se izvedejo povezana dejanja za zbiranje dodatnega konteksta, kot so besedilo SQL, ID seje ali informacije o skladu klicev.

Med pogosta dejanja spadajo sql_text za zajem poizvedbenih stavkov, database_name za identifikacijo baze podatkov in client_hostname za sledenje izvornemu strežniku. Dejanja zagotavljajo bistven kontekst za odpravljanje težav in analizo.

2.5 Cilji

Cilji določajo, kako in kje se shranjujejo podatki o dogodkih. SQL Server Razširjeni dogodki podpirajo več vrst ciljev, vključno z:

  • event_file za shranjevanje na disku, ki zagotavlja trajno shranjevanje za podrobno analizo
  • ring_buffer za hrambo na podlagi pomnilnika, ki ponuja hiter dostop do nedavnih dogodkov z minimalnimi stroški
  • event_counter za preprosto štetje
  • histogram za združevanje
  • ujemanje parov za korelacijo povezanih dogodkov

2.6 Predikati (filtri)

Predikati filtrirajo dogodke na podlagi določenih pogojev, s čimer zmanjšajo količino zajetih podatkov. Filtrirate lahko po imenu baze podatkov, imenu aplikacije, ID-ju seje, pragovih trajanja ali kateri koli vrednosti polja dogodka.

Učinkovita uporaba predikata zmanjšuje vpliv na zmogljivost, saj zajema le ustrezne dogodke. Kompleksni predikati združujejo več pogojev z uporabo logičnih operatorjev za ustvarjanje natančnih kriterijev filtriranja.

3. Razširjena stanja in življenjski cikel seje dogodkov

3.1 Stanja seje: USTVARI, SPREMENI in IZBRIŠI

Seje razširjenih dogodkov napredujejo skozi različna stanja:

  • Stavek CREATE EVENT SESSION definira novo sejo, vendar je ne zažene. Seja obstaja v zaustavljenem stanju, dokler ni izrecno aktivirana.
  • Stavek ALTER EVENT SESSION spremeni konfiguracijo seje ali spremeni njeno stanje med zaustavljeno in zagnano.
  • Stavek DROP EVENT SESSION v celoti odstrani definicijo seje s strežnika.

3.2 Vsebina in značilnosti seje

Vsaka seja vsebuje zbirko dogodkov, dejanj, ciljev in predikatov. Seje imajo implicitne meje, ki določajo njihov obseg in vedenje. Možnosti konfiguracije nadzorujejo dodeljevanje pomnilnika, hrambo dogodkov in zakasnitev pošiljanja.

Značilnosti sej vključujejo, ali se ohranijo po ponovnih zagonih strežnika, največjo dodelitev pomnilnika in kako se spopadajo s pritiskom na pomnilnik. Te nastavitve pomembno vplivajo na delovanje seje in porabo virov.

3.3 Meje sej in paketi

Meje sej določajo odnose med dogodki, cilji in paketi. Dogodki iz enega paketa lahko sprožijo dejanja iz drugega paketa, kar zagotavlja prilagodljivost pri strategijah zbiranja podatkov.

Paketne povezave vam omogočajo združevanje dogodkov iz več virov v eni seji. Ta zmožnost omogoča celovite scenarije spremljanja, ki zajemajo različne SQL Server podsistemi.

4. Ustvarjanje razširjenih sej dogodkov z uporabo SSMS

4.1 Predpogoji in nastavitev

Pred ustvarjanjem SQL Server Za seje razširjenih dogodkov se prepričajte, da imate ustrezna dovoljenja. Za seje na ravni strežnika potrebujete dovoljenje ALTER ANY EVENT SESSION ali dovoljenje CONTROL za bazo podatkov za seje na ravni baze podatkov.

Preveri to SQL Server Management Studio je nameščen in povezan z vašim ciljnim primerkom. Seznanite se z zahtevami spremljanja in ugotovite, kateri dogodki in cilji najbolj ustrezajo vašim potrebam.

4.2 Dostop do razširjenih dogodkov v Raziskovalcu objektov

Za dostop do vmesnika razširjenih dogodkov v SSMS sledite tem korakom:

  1. Odprto SQL Server Management Studio in se povežite s svojim SQL Server na primer.
  2. V Raziskovalcu predmetov razširite upravljanje -> Razširjeni dogodki.
  3. Vozlišče Razširjeni dogodki vsebuje Sessions in Paketi mape za upravljanje konfiguracij spremljanja.

Dostopite do vmesnika razširjenih dogodkov v SQL Server Studio za upravljanje.

4.3 Ustvarjanje nove seje

Če želite ustvariti novo sejo:

    1. Z desno miškino tipko kliknite Sessions mapa pod Razširjeni dogodki.
    2. Izberite Nova seja , da odprete pogovorno okno za konfiguracijo. Naslednja vsebina bo uporabila to metodo za ustvarjanje nove seje.

Ustvari novo sejo razširjenih dogodkov v SQL Server Studio za upravljanje.

Opomba: Čarovnik za novo sejo je na voljo tudi za bolj vodeno izkušnjo.

4.3.1 Splošna konfiguracija strani

o splošno stran, konfigurirajte osnovne lastnosti seje:

  1. Vnesite ime seje v Ime seje polje. Uporabite opisna imena, ki označujejo namen spremljanja.
  2. Po želji izberite Začni sejo dogodka ob zagonu strežnika da omogočite samodejno aktivacijo seje.
  3. Privzeta predloga seje je BlankČe uporabljate vnaprej določeno konfiguracijo, lahko uporabite druge predloge.

Splošna stran seje razširjenih dogodkov v SQL Server Studio za upravljanje.

4.3.2 Nastavitev strani z dogodki

Naš Dogodki stran vam omogoča, da izberete, katere dogodke želite spremljati:

  1. Izberite Dogodki stran z leve Izberite stran plošča.
  2. v Knjižnica dogodkov, prebrskajte razpoložljive dogodke ali uporabite funkcijo iskanja.
  3. Filtrirajte dogodke tako, da vnesete ključne besede, kot je »sql_statement_completed«, da poiščete ustrezne dogodke.
  4. Izberite želeni dogodek, na primer sql_statement_completed.
  5. Kliknite gumb s puščico v desno, da premaknete dogodek na Izbrani dogodki seznam.

Stran z dogodki v seji razširjenih dogodkov v SQL Server Studio za upravljanje.

4.3.3 Konfiguracija shranjevanja podatkov

Naš Shranjevanje podatkov stran določa, kje so shranjeni podatki o dogodkih:

  1. Izberite Shranjevanje podatkov stran z leve Izberite stran plošča.
  2. v Cilji območje, v spustnem meniju izberite vrsto cilja.

Stran za shranjevanje podatkov seje razširjenih dogodkov v SQL Server Studio za upravljanje.

(1) datoteka_dogodka Cilj

Cilj event_file shrani podatke v datoteke na disku s končnico .xel:

  1. Izberite datoteka_dogodka iz spustnega menija vrste cilja.
  2. Določite pot do datoteke, na primer C:\temp\Cilj_vaše_seje.xel.
  3. Konfigurirajte možnosti prevračanja podatkov za upravljanje prostora na disku z nastavitvijo največje velikosti in števila datotek.
  4. Cilj neprekinjeno zapisuje dogodke, dokler se seja ne ustavi ali dokler niso dosežene omejitve pomnilnika.

V SSMS nastavite cilj seje na event_file

(2) Cilj obročnega_vmesnega_pomnilnika

Cilj ring_buffer shrani dogodke v pomnilnik za hiter dostop brez vhodno/izhodnih operacij diska:

  1. Izberite obročni_vmesni_pomnilnik kot ciljni tip.
  2. Konfigurirajte največjo dodelitev pomnilnika za medpomnilnik.
  3. Razumeti je treba, da se starejši dogodki zavržejo, ko se medpomnilnik napolni, zaradi česar je to primerno za spremljanje nedavnih dejavnosti.

Za sejo razširjenih dogodkov v nastavi cilj na ring_buffer SQL Server Studio za upravljanje.

(3) števec_eventov Cilj

Cilj event_counter preprosto šteje pojave dogodkov brez shranjevanja podrobnih podatkov. To zagotavlja minimalne stroške, ko potrebujete le podatke o frekvenci.

Nastavite cilj na event_counter za sejo razširjenih dogodkov v SQL Server Studio za upravljanje.

(4) Cilj histograma

Histogram združuje dogodke po določeni vrednosti polja in ustvarja statistiko porazdelitve. To je uporabno za prepoznavanje pogostih vzorcev ali visokofrekvenčnih vrednosti.

Nastavite cilj na histogram za sejo razširjenih dogodkov v SQL Server Studio za upravljanje.

(5) Cilj ujemanja parov

Cilj `pair_matching` povezuje povezane dogodke, kot sta pridobitev in sprostitev zaklepanja. To omogoča analizo parnih operacij in njihovih časovnih razmerij.

V SSMS nastavite cilj seje na pair_matching

4.3.4 Napredne nastavitve

Naš Napredni paket stran ponuja možnosti konfiguracije na ravni seje:

  1. Izberite Napredni paket stran z leve Izberite stran plošča.
  2. Konfiguracija Način zadrževanja dogodkov za nadzor nad tem, kako se dogodki obravnavajo pod pritiskom pomnilnika.
  3. Kompleti Največja zakasnitev odpreme za uravnoteženje obdelave v realnem času z zmogljivostjo sistema.
  4. Konfiguracija Največja velikost pomnilnika in Največja velikost dogodka glede na vaše zahteve glede spremljanja.
  5. Izberite Način particije pomnilnika za optimizacijo za okolja z enim ali več procesorji.

Napredna stran seje v SQL Server Studio za upravljanje.

4.4 Konfiguriranje filtrov dogodkov (predikati)

Predikati zmanjšajo količino podatkov s filtriranjem dogodkov na podlagi določenih meril. Če želite konfigurirati filtre:

  1. o Dogodki Na strani izberite dogodek, ki ga želite filtrirati, na primer »sql_statement_completed«.
  2. klik Konfiguracija , da odprete pogovorno okno za konfiguracijo dogodka.
    Konfigurirajte dogodek seje razširjenih dogodkov v SQL Server Studio za upravljanje.
  3. Izberite Filter (predikat) tab.
  4. v Polje V spustnem meniju izberite polje, po katerem želite filtrirati, na primer trajanje.
  5. Izberite Operater, na primer »>«.
  6. Vnesite filter Vrednost, na primer 1000000 (1 sekunda).
  7. Po potrebi dodajte še več pogojev.

Konfigurirajte filtre (predikate) za dogodek.

4.5 Izbira dejanj in polj dogodkov

Za vsak dogodek lahko izberete podatke, ki jih želite zbrati:

  1. o Dogodki Na strani izberite dogodek, za katerega želite izbrati podatke, na primer »sql_statement_completed«.
  2. klik Konfiguracija , da odprete pogovorno okno za konfiguracijo dogodka.
  3. Izberite Globalna polja (dejanja) tab.
  4. Izberite dejanja za dodajanje dodatnih informacij, kot sta ime_baze_podatka ali ime_odjemalske_aplikacije.
    Konfigurirajte dejanja dogodka.
  5. Preglejte Polja dogodkov razdelku, da vidite, katera polja se samodejno zajamejo.
  6. Počistite vsa nepotrebna polja, da zmanjšate količino podatkov.
    Konfigurirajte polja dogodka.

4.6 Začetek in upravljanje sej

Ko konfigurirate sejo, jo lahko zaženete in spremljate njeno delovanje:

  1. klik OK za ustvarjanje seje.
  2. V Raziskovalcu predmetov razširite Sessions mapo, da si ogledate svojo novo sejo.
  3. Z desno tipko miške kliknite ime seje in izberite Začnite sejo za začetek snemanja dogodkov.
    Začnite sejo razširjenih dogodkov v SQL Server Studio za upravljanje.
  4. Za ogled podatkov v živo z desno miškino tipko kliknite sejo in izberite Oglejte si podatke v živo.
    Oglejte si podatke v živo seje razširjenih dogodkov v SQL Server Studio za upravljanje.
  5. Sejo ustavite tako, da kliknete z desno tipko miške in izberete Ustavi sejo.

5. Ustvarjanje razširjenih sej dogodkov z uporabo T-SQL

5.1 Sintaksa USTVARJANJA SEJE DOGODKA

Ustvarjanje razširjenih sej dogodkov s T-SQL zagotavlja natančen nadzor in omogoča skriptanje za avtomatizirano uvajanje. Stavek CREATE EVENT SESSION sledi specifični sintaksni strukturi.

Osnovna sintaksa vključuje ime seje, klavzule ADD EVENT za vsak dogodek, klavzule ADD TARGET za cilje shranjevanja in izbirne klavzule WITH za konfiguracijo seje.

5.2 Ustvarjanje osnovne seje dogodka

Osnovna seja spremlja določene dogodke in zapisuje rezultate v cilj. Tukaj je opisano, kako sestaviti bistvene komponente.

5.2.1 Določanje imena in možnosti seje

Začnite z ustvarjanjem seje z opisnim imenom:

CREATE EVENT SESSION [SampleSession] ON SERVER

Klavzula ON SERVER ustvari sejo na ravni strežnika, ki se ohrani po spremembah baze podatkov. Za zbirko podatkov Azure SQL uporabite ON DATABASE za seje na ravni baze podatkov.

5.2.2 Dodajanje dogodkov z ukazom DODAJ DOGODEK

Dodajte dogodke za zajemanje z uporabo stavka ADD EVENT:

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

To zajame vse dokončane stavke SQL. Več dogodkov lahko dodate z vključitvijo dodatnih stavkov ADD EVENT.

5.2.3 Konfiguracija dejanj dogodkov

Dejanja zbirajo dodaten kontekst za vsak dogodek. Dejanja dodajte v oklepaje za imenom dogodka:

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

Ta primer zajame besedilo SQL, ime baze podatkov in uporabniško ime za vsak dokončan stavek.

5.2.4 Nastavitev predikatov dogodkov (klavzula WHERE)

Predikati filtrirajo dogodke za zmanjšanje količine podatkov. Uporabite stavek WHERE v definiciji dogodka:

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

To filtrira stavke s trajanjem, daljšim od 5 sekund (5,000,000 mikrosekund).

5.3 Dodajanje ciljev dogodkov

Cilji določajo, kje so shranjeni podatki o dogodkih in kako so obdelani.

5.3.1 Sintaksa DODAVANJA CILJNIH VRST

Dodajte cilje z uporabo stavka ADD TARGET, ko so definirani vsi dogodki:

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

Predpona package0 označuje, da cilj prihaja iz osnovnega paketa.

5.3.2 Konfiguracija ciljnih parametrov

Vsaka vrsta cilja sprejema specifične parametre. Za event_file konfigurirajte filename, max_file_size in max_rollover_files:

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

Ta konfiguracija ustvari datoteke do velikosti 50 MB, pri čemer se s prenosom miške ohrani do 5 datotek.

5.4 Možnosti in nastavitve seje

Klavzula WITH konfigurira možnosti na ravni seje, ki nadzorujejo vedenje in porabo virov.

5.4.1 MAX_MEMORY in EVENT_RETENTION_MODE

Nadzor dodeljevanja pomnilnika in obravnave dogodkov pod pritiskom:

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

Možnosti EVENT_RETENTION_MODE vključujejo ALLOW_SINGLE_EVENT_LOSS za minimalno porabo pomnilnika, ALLOW_MULTIPLE_EVENT_LOSS za zmerno porabo in NO_EVENT_LOSS za popolno hrambo podatkov za ceno morebitnega vpliva na zmogljivost.

5.4.2 MAX_DISPATCH_LATENCY

Nastavite najdaljši čas, ki ga lahko dogodki ostanejo v medpomnilniku, preden se zapišejo v cilje:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Nižje vrednosti zagotavljajo več podatkov v realnem času, vendar za ceno povečanega števila V/I operacij.

5.4.3 NAČIN_POMNILNE_PARTICIJE

Optimizirajte particioniranje pomnilnika glede na konfiguracijo strojne opreme:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Možnosti vključujejo NONE za eno particijo, PER_NODE za sisteme NUMA in PER_CPU za največjo možno sočasnost v sistemih z več procesorji.

5.5 Zagon, zaustavitev in spreminjanje sej

Upravljajte stanje in konfiguracijo seje z ukazi ALTER EVENT SESSION.

5.5.1 SPREMEMBA SEJE DOGODKA za zagon/ustavitev

Začni sejo po ustvarjanju:

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

Ustavitev tekaške seje:

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

5.5.2 Spreminjanje obstoječih sej

Spremenite konfiguracijo seje med ustavitvijo. Dodajte dogodke:

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

Odstrani dogodke:

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

5.5.3 Opustitev sej dogodkov

Sejo v celoti odstranite z ukazom DROP EVENT SESSION:

DROP EVENT SESSION [SampleSession] ON SERVER;

Sejo je treba pred padcem prekiniti.

6. Podrobno delo s cilji dogodkov

6.1 event_file Ciljna konfiguracija

Cilj event_file zagotavlja trajno shranjevanje podatkov o dogodkih s prilagodljivimi možnostmi konfiguracije.

6.1.1 Pot do datotek in pravila poimenovanja

Navedite celotno pot in ime datoteke za datoteke dogodkov:

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

Za razširjene datoteke dnevnika dogodkov uporabite končnico .xel. Prepričajte se, da SQL Server Storitveni račun ima dovoljenja za pisanje v določeni imenik.

6.1.2 Upravljanje datotek in njihova velikost

Konfigurirajte samodejno preusmerjanje datotek za upravljanje prostora na disku:

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

Ko datoteka doseže 50 MB, SQL Server Razširjeni dogodki ustvarijo novo datoteko s povečano pripono. Ko je doseženih 10 datotek, se najstarejša datoteka prepiše.

6.1.3 Branje podatkov datoteke dogodkov

Poizvedujte po podatkih datoteke dogodkov s funkcijo sys.fn_xe_file_target_read_file:

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

Vzorec nadomestnega znaka prebere vse datoteke, povezane s sejo.

6.2 Uporaba cilja ring_buffer

Cilj ring_buffer shranjuje dogodke v pomnilniku za hiter dostop do nedavnih dejavnosti.

6.2.1 Shranjevanje dogodkov v pomnilniku

Konfigurirajte ring_buffer za shranjevanje v pomnilniku:

ADD TARGET package0.ring_buffer

Dogodki so dostopni le, ko je seja aktivna in SQL Server se izvaja. Podatki se izgubijo, ko se seja prekine ali se strežnik znova zažene.

6.2.2 Velikost in konfiguracija medpomnilnika

Dodelitev nadzornega pomnilnika za obročni medpomnilnik:

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

Določite pomnilnik v KB. Ko se medpomnilnik napolni, se starejši dogodki zavržejo z uporabo pristopa FIFO.

6.2.3 Poizvedba po podatkih obročnega medpomnilnika

Dostop do podatkov medpomnilnika obroča prek DMV-jev:

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

Ciljni_podatki vsebujejo informacije o dogodkih v obliki XML.

6.3 števec_eventov Cilj

Cilj event_counter omogoča preprosto štetje brez podrobnega shranjevanja podatkov:

ADD TARGET package0.event_counter

Ta ciljna skupina spremlja pogostost dogodkov z minimalnimi stroški, kar je uporabno za spremljanje velikega obsega dogodkov, kjer je pomembno le število dogodkov.

6.4 Cilj histograma

Cilj histograma združuje dogodke po vrednostih polj:

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

Ta konfiguracija ustvari histogram, ki prikazuje porazdelitev dogodkov po podatkovnih bazah.

6.5 ujemanje parov Cilj

Cilj pair_matching povezuje povezane dogodke, kot so pridobitve zaklepov, z izdajami:

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

To omogoča analizo parnih operacij in njihovega trajanja.

7. Ogled in analiza razširjenih podatkov o dogodkih

7.1 Uporaba SSMS za ogled podatkov v živo

SQL Server Management Studio ponuja grafični vmesnik za ogled podatkov razširjenih dogodkov v realnem času:

  1. V Raziskovalcu predmetov razširite upravljanje -> Razširjeni dogodki -> Sessions.
  2. Z desno miškino tipko kliknite aktivno sejo.
  3. Izberite Oglejte si podatke v živo , da odprete pregledovalnik podatkov v živo.
    Oglejte si podatke v živo seje razširjenih dogodkov v SQL Server Studio za upravljanje.
  4. Dogodki se v mreži prikazujejo sproti.
  5. Kliknite posamezne dogodke, da si v podoknu s podrobnostmi ogledate podrobne vrednosti polj.
    Oglejte si podatke dogodkov v živo, vključno s podrobnostmi dogodka.
  6. S filtri v orodni vrstici se osredotočite na določene vrste dogodkov ali vrednosti polj.

7.2 Poizvedovanje po podatkih datoteke dogodkov s T-SQL

Poizvedbe T-SQL omogočajo prilagodljivo analizo zajetih podatkov o dogodkih.

7.2.1 Funkcija sys.fn_xe_file_target_read_file

Preberite podatke datoteke dogodkov s to sistemsko funkcijo:

SELECT
    object_name AS EventName,
    CAST(event_data AS XML) AS EventData,
    file_name,
    file_offset,
    timestamp_utc
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

Funkcija vrne eno vrstico na dogodek s podrobnostmi v obliki XML.

7.2.2 Razčlenjevanje podatkov o dogodkih XML

Iz podatkov o dogodkih XML izluščite določene vrednosti:

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;

Izrazi XQuery izvlečejo posamezne vrednosti polj iz strukture XML.

7.2.3 Pretvorba podatkov dogodkov v tabele

Ustvarite strukturirane nabore rezultatov iz podatkov o dogodkih:

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 Poizvedba po podatkih obročnega medpomnilnika

Izvleček podatkov iz ciljev ring_buffer:

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 Sistemski pogledi za razširjene dogodke

SQL Server ponuja več DMV-jev in kataloških pogledov za upravljanje in spremljanje sej razširjenih dogodkov.

7.4.1 seje_dogodkov_sistemskega_serverja

Ogled definicij sej, shranjenih na strežniku:

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

Ta pogled kataloga prikazuje podrobnosti konfiguracije za vse definirane seje.

7.4.2 sys.dm_xe_sessions

Ogled trenutno aktivnih sej:

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

Ta DMV zagotavlja informacije o aktivnih sejah razširjenih dogodkov med izvajanjem.

7.4.3 sys.dm_xe_session_targets

Ogled ciljev, povezanih z aktivnimi sejami:

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 Drugi uporabni DMV-ji

Dodatni pogledi zagotavljajo celovite informacije o seji:

  • sys.dm_xe_session_events: Seznam dogodkov v aktivnih sejah
  • sys.dm_xe_session_event_actions: Prikaže dejanja, konfigurirana za dogodke seje.
  • sys.dm_xe_objects: Katalogizira vse razpoložljive dogodke, dejanja in cilje
  • sys.dm_xe_object_columns: Polja s podrobnostmi, ki so na voljo za vsako vrsto dogodka
  • sys.dm_xe_packages: Seznam vseh paketov razširjenih dogodkov

8. Praktični primeri uporabe in zgledi

8.1 Spremljanje izvajanja stavkov SQL

Sledenje izvajanju stavkov SQL omogoča vpogled v vzorce poizvedb in značilnosti delovanja.

8.1.1 Sledenje dogodkom sql_statement_completed

Ustvarite sejo za spremljanje dokončanih stavkov SQL:

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 Filtriranje po zbirki podatkov ali aplikaciji

Osredotočite se na specifične baze podatkov ali aplikacije z uporabo predikatov:

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 Zajemanje informacij o zastoju

Analiza zastojev zahteva zajemanje podrobnih informacij o nasprotujočih si transakcijah.

8.2.1 Dogodek xml_deadlock_report

Ustvarite sejo za zajem celotnih grafov zastojev:

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 Analiza grafov zastojev

Pridobivanje in analiza informacij o zastoju:

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

Graf zastojev vsebuje podrobnosti o procesih, virih in izbiri žrtve.

8.3 Težave z učinkovitostjo delovanja poizvedb sledenja

Prepoznajte slabo delujoče poizvedbe z uporabo metrik trajanja in porabe virov.

8.3.1 Zaznavanje dolgotrajnih poizvedb

Zajemanje poizvedb, ki presegajo določene pragove trajanja:

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 Analiza izvedbenega načrta

Načrti poizvedb za zajemanje za analizo učinkovitosti delovanja:

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 Spremljanje dogodkov prijave in varnosti

Spremljajte dejavnosti preverjanja pristnosti in avtorizacije za varnostne revizije.

8.4.1 Sledenje uspešnim in neuspešnim prijavam

Spremljajte uspešne in neuspešne poskuse prijave:

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 Spremembe dovoljenj

Spremembe varnostnih dovoljenj za sledenje:

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 Spremljanje na ravni baze podatkov

Spremljajte operacije, specifične za bazo podatkov, in spremembe stanja.

8.5.1 Dogodki varnostnega kopiranja in obnovitve

Sledenje operacijam varnostnega kopiranja in obnovitve:

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 Spremembe stanja baze podatkov

Spremljanje prehodov stanja baze podatkov:

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

8.6 Odkrivanje poškodb in težav z integriteto baze podatkov

SQL Server Razširjeni dogodki zagotavljajo zmogljivosti zgodnjega opozarjanja za odkrivanje morebitne poškodbe baze podatkov, kar omogoča proaktivno posredovanje, preden se težave stopnjujejo.

8.6.1 Ključni dogodki za odkrivanje korupcije

Več dogodkov signalizira morebitno poškodbo ali težave z V/I.

8.6.1.1 Dogodek error_reported za kritične napake

Dogodek error_reported zajame vse SQL Server napake, vključno s številkami napak, povezanih s korupcijo:

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

Napaka 823 označuje napake V/I, 824 signalizira napake logične skladnosti, 825 pa poroča o uspešnih poskusih branja, ki lahko kažejo na težave s strojno opremo.

8.6.1.2 Dogodek database_suspect_data_page

Ta dogodek se sproži, ko SQL Server naleti na sumljivo stran:

ADD EVENT sqlserver.database_suspect_data_page

Sumljive strani kažejo na morebitno poškodbo in so zabeležene v tabeli msdb.dbo.suspect_pages.

8.6.1.3 errorlog_written dogodek

Zajemanje vnosov, zapisanih v SQL Server dnevnik napak:

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

8.6.2 Ustvarjanje seje spremljanja korupcije

Vzpostavite celovito sejo za odkrivanje in spremljanje korupcije.

8.6.2.1 Filtriranje številk napak zaradi poškodb (823, 824, 825)

Ustvarite ciljno usmerjeno sejo s poudarkom na kazalnikih korupcije:

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 Nastavitev ustreznih stopenj resnosti

Vključite napake z visoko stopnjo resnosti, ki lahko kažejo na poškodbo:

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

Resnost 20 in več kaže na težave na ravni sistema, ki so pogosto povezane s korupcijo.

8.6.2.3 Konfiguracija cilja datoteke dogodkov za opozorila

Shranjevanje dogodkov korupcije za analizo in opozarjanje:

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 Analiza podatkov o dogodkih korupcije

Iz zajetih podatkov izluščite in interpretirajte dogodke, povezane s korupcijo.

8.6.3.1 Prepoznavanje sumljivih strani

Poizvedba za dogodke database_suspect_data_page:

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 Pridobivanje podrobnosti o napaki in konteksta

Analizirajte dogodke error_reported za vzorce korupcije:

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
    EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
    EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
    EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
    AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);

8.6.4 Integracija z DBCC CHECKDB

Uporabite podatke razširjenih dogodkov kot vodilo DBCC CHECKDB izvedbo.

8.6.4.1 Sproženje DBCC CHECKDB na podlagi dogodkov

Ko so zaznani dogodki korupcije, izvedite DBCC CHECKDB za celovito preverjanje:

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

Razširjeni dogodki zagotavljajo zgodnje opozorilo, medtem ko DBCC CHECKDB izvaja temeljito preverjanje.

8.6.4.2 Avtomatizirani poteki dela za odzivanje na korupcijo

Izvedite avtomatizirane odzive s spremljanjem datoteke dogodkov:

  1. Konfiguracija SQL Server Naloga agenta za občasno poizvedovanje v datoteki dogodkov spremljanja poškodb.
  2. Ko so odkriti dogodki poškodb, izvedite DBCC CHECKDB v prizadeti zbirki podatkov.
  3. Pošljite e-poštna opozorila upraviteljem baz podatkov s podrobnostmi o dogodkih in rezultati DBCC CHECKDB.
  4. Ugotovitve zabeležite v centralizirano tabelo za spremljanje za analizo trendov.
8.6.4.3 Usklajevanje proaktivnega spremljanja z učinkovitostjo delovanja

Razširjeni dogodki ponujajo zaznavanje poškodb z nizkimi stroški v primerjavi s pogostim izvajanjem DBCC CHECKDB:

  • Neprekinjeno izvajajte razširjene dogodke za odkrivanje korupcije v realnem času
  • Izvedi DBCC CHECKDB samo, ko se pojavijo indikatorji poškodb
  • Načrtujte redno DBCC CHECKDB med vzdrževalnimi okni
  • Uporabite razširjene dogodke za prepoznavanje, katere baze podatkov zahtevajo takojšnjo pozornost

Ta pristop omogoča proaktivno spremljanje brez znatne porabe virov zaradi nenehnih preverjanj integritete.

8.6.4.4 Popravilo poškodovane baze podatkov

Če so v zbirki podatkov zaznane poškodbe, lahko z ukazom DBCC CHECKDB odpravite manjše poškodbe. Če to ne uspe, lahko poskusite z orodjem drugega ponudnika. Orodje za obnovitev baze podatkov SQL, ki običajno ponuja višjo stopnjo okrevanja pri močno poškodovanih bazah podatkov.

9. Razširjeni dogodki v obsegu strežnika v primerjavi z razširjenimi dogodki v obsegu baze podatkov

9.1 Seje dogodkov na ravni strežnika

Seje na ravni strežnika spremljajo aktivnost v celotnem SQL Server primerek. Te seje so ustvarjene s klavzulo ON SERVER in ostanejo shranjene v glavni bazi podatkov.

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

Seje na ravni strežnika zajemajo dogodke iz vseh baz podatkov in so primerne za spremljanje na ravni instance.

9.2 Seje dogodkov v obsegu baze podatkov (baza podatkov Azure SQL)

Seje, omejene na podatkovno bazo, so omejene na eno samo podatkovno bazo in se uporabljajo predvsem v podatkovni bazi Azure SQL, kjer je dostop na ravni strežnika omejen:

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

V zbirki podatkov Azure SQL so datoteke dogodkov shranjene v shrambi Azure Blob Storage in ne v lokalnih datotečnih sistemih.

9.3 Razlike in primeri uporabe

Seje na ravni strežnika zagotavljajo celovito spremljanje vseh baz podatkov, vendar zahtevajo povišana dovoljenja. Seje na ravni baze podatkov ponujajo izolacijo in so primerne pri spremljanju določenih aplikacij ali najemnikov.

Za centralizirano spremljanje, odpravljanje težav z delovanjem v različnih bazah podatkov in varnostno revidiranje uporabite seje na ravni strežnika. Seje na ravni baze podatkov uporabite v zbirki podatkov Azure SQL, večnajemniških okoljih ali pri delegiranju odgovornosti za spremljanje na ekipe aplikacij.

10. Razširjeni dogodki v zbirki podatkov Azure SQL

10.1 Premisleki, specifični za Azure

Zbirka podatkov Azure SQL izvaja razširjene dogodke z nekaj razlikami od lokalnih SQL ServerSeje so privzeto omejene na bazo podatkov, shranjevanje datotek dogodkov pa uporablja shrambo Azure Blob Storage namesto lokalnih datotečnih sistemov.

Za preverjanje pristnosti v storitvi Azure Blob Storage je potreben žeton SAS, konfiguriran znotraj cilja datoteke dogodkov. Povezovalni nizi se sklicujejo na račun shrambe in vsebnik, kjer so shranjene datoteke dogodkov.

10.2 Razpoložljivi cilji v storitvi Azure

Zbirka podatkov Azure SQL podpira te cilje razširjenih dogodkov:

  • event_file: Zapisuje v shrambo Azure Blob Storage
  • ring_buffer: Shramba v pomnilniku z enakim delovanjem kot na lokaciji
  • event_counter: Šteje pojave dogodkov

Cilj event_file zahteva konfiguracijo s poverilnicami za shrambo Azure Blob Storage:

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

10.3 Ustvarjanje sej na ravni baze podatkov

Ustvarite sejo v zbirki podatkov Azure SQL:

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;

Seje na ravni baze podatkov v storitvi Azure se obnašajo podobno kot seje na ravni strežnika na lokaciji, vendar je njihov obseg omejen na trenutno bazo podatkov.

11. Najboljše prakse in optimizacija delovanja

11.1 Zmanjševanje vpliva na učinkovitost delovanja

Razširjeni dogodki so zasnovani za minimalne stroške, vendar lahko nepravilna konfiguracija vpliva na delovanje. Upoštevajte ta navodila:

  • Za filtriranje dogodkov uporabite specifične predikcije, namesto da zajamete vse
  • Izogibajte se zbiranju nepotrebnih dejanj, ki povečujejo stroške obdelave
  • Izberite ustrezne cilje glede na potrebe po hrambi podatkov
  • Nastavite razumne velikosti medpomnilnikov in zakasnitve pošiljanja
  • Spremljanje porabe virov seje z uporabo DMV-jev

11.2 Izbira pravih dogodkov in filtrov

Izberite dogodke, ki neposredno naslavljajo vaše cilje spremljanja. Izogibajte se dogodkom z visoko frekvenco, razen če je to potrebno, in vedno uporabite predikate za zmanjšanje količine podatkov.

Na primer, namesto zajemanja vseh dogodkov sql_statement_completed filtrirajte po določenih bazah podatkov ali pragovih trajanja:

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

11.3 Smernice za izbiro tarč

Izberite cilje glede na vaše analitične zahteve:

  • Za podrobno zgodovinsko analizo in dolgoročno hrambo uporabite datoteko event_file
  • Uporabite ring_buffer za spremljanje v realnem času z minimalnim vplivom na V/I
  • Uporabite event_counter, kadar je pomembna le frekvenca
  • Uporaba histograma za analizo porazdelitve
  • Uporaba parnega ujemanja za analizo koreliranih dogodkov

11.4 Priporočila za konfiguracijo seje

Konfigurirajte seje z ustreznimi omejitvami virov:

  • Nastavi MAX_MEMORY glede na pričakovano količino dogodkov in strežniške vire
  • Za minimalne stroške v večini scenarijev uporabite ALLOW_SINGLE_EVENT_LOSS
  • Nastavite MAX_DISPATCH_LATENCY za uravnoteženje potreb v realnem času z zmogljivostjo
  • Uporaba particioniranja pomnilnika PER_CPU v večprocesorskih sistemih
  • Izogibajte se STARTUP_STATE=ON, razen če je potrebno stalno spremljanje

11.5 Upravljanje velikosti in hranjenja datotek dogodkov

Konfigurirajte prenos datotek, da preprečite neomejeno uporabo diska:

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

Ta konfiguracija vzdržuje približno 1 GB podatkov o dogodkih (10 datotek × 100 MB). Prilagodite glede na vaše zahteve glede shranjevanja in razpoložljiv prostor za shranjevanje.

12. Odpravljanje težav z razširjenimi dogodki

12.1 Pogoste težave in rešitve

Pogoste težave z razširjenimi dogodki vključujejo seje, ki ne zajemajo podatkov, zmanjšanje zmogljivosti, težave s ciljnimi datotekami in nepričakovano vedenje seje.

12.2 Seja ne zajema podatkov

Če seja ne zajame pričakovanih dogodkov:

  1. Preverite, ali je seja zagnana z uporabo sys.dm_xe_sessions.
  2. Preverite predikate, da se prepričate, da ne filtrirajo vseh dogodkov.
  3. Potrdite, da se dogodki sprožajo, tako da začasno odstranite filtre.
  4. Preverite dovoljenja, da se prepričate, da imate dostop do ogleda podatkov seje.
  5. Preverite, ali je ciljna konfiguracija pravilna in zapisljiva.
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Poslabšanje delovanja

Če razširjeni dogodki povzročajo težave z delovanjem:

  1. Dodajte predikate za zmanjšanje števila dogodkov.
  2. Odstranite nepotrebna dejanja, ki zbirajo dodatne podatke.
  3. Povečajte MAX_DISPATCH_LATENCY, da zmanjšate pogostost pisanja.
  4. Spremenite EVENT_RETENTION_MODE na ALLOW_SINGLE_EVENT_LOSS.
  5. Za dogodke z visoko frekvenco razmislite o uporabi ring_buffer namesto event_file.

12.4 Težave s ciljno datoteko

Težave s ciljnimi datotekami so pogosto povezane z dovoljenji ali prostorom na disku:

  1. Preverite SQL Server Storitveni račun ima dovoljenja za pisanje v ciljni imenik.
  2. Zagotovite, da je na voljo dovolj prostora na disku.
  3. Preverite, ali navedena pot obstaja in je dostopna.
  4. Če se datoteke ne prevažajo po pričakovanjih, preglejte konfiguracijo prevračanja datotek.

12.5 Odpravljanje napak s sistemskimi pogledi

Uporabite DMV-je za diagnosticiranje težav z razširjenimi dogodki:

-- 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. Napredne teme

13.1 Ustvarjanje paketov dogodkov po meri

Napredni uporabniki lahko ustvarijo pakete dogodkov po meri, da razširijo SQL Server Razširjena funkcionalnost dogodkov. To zahteva razvoj v jeziku C++ in integracijo z SQL Server ogrodje za razširljivost.

Paketi po meri omogočajo spremljanje dogodkov, specifičnih za aplikacijo, ali integracijo sistemov za spremljanje tretjih oseb z infrastrukturo razširjenih dogodkov.

13.2 Predloge sej dogodkov

SSMS ponuja vgrajene predloge za pogoste scenarije spremljanja. Dostop do predlog pri ustvarjanju novih sej prek čarovnika:

  1. V pogovornem oknu Nova seja kliknite predloga padajoči.
  2. Izberite med razpoložljivimi predlogami, kot sta Sledenje podrobnostim poizvedbe ali Zdravje sistema.
  3. Spremenite predlogo, da bo ustrezala vašim specifičnim zahtevam.

13.3 Integracija z rešitvami za spremljanje

Podatki o razširjenih dogodkih lahko pomagajo rešitvam za spremljanje v podjetjih:

  • Izvoz podatkov o dogodkih v centralizirane sisteme za beleženje
  • Razčlenite datoteke dogodkov in naložite podatke v nadzorne baze podatkov
  • Ustvarjanje nadzornih plošč po meri z orodji poslovne inteligence
  • Sproži opozorila na podlagi določenih vzorcev dogodkov
  • Povezati SQL Server dogodki z metrikami aplikacij in infrastrukture

13.4 Avtomatizacija in razporejanje

Avtomatizirajte upravljanje razširjenih dogodkov z uporabo SQL Server Zastopnik:

  • Ustvarjanje opravil za zagon/ustavitev sej v določenih časovnih oknih
  • Analiza in poročanje o načrtu datotek dogodkov
  • Uvedite pravilnike o hranjenju podatkov z arhiviranjem ali brisanjem starih datotek dogodkov
  • Avtomatizirajte odziv na zaznane pogoje, kot so težave z delovanjem ali varnostni dogodki

14. Migracija iz SQL Server Profil

14.1 SQL Server Preslikava dogodkov profilerja v razširjene dogodke

Microsoft zagotavlja preslikavo med SQL Server Profil dogodki in razširjeni dogodki. Pogoste preslikave vključujejo:

  • SQL:BatchCompleted -> sql_batch_completed
  • SQL:BatchStarting -> sql_batch_starting
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starting
  • Graf zastojev -> xml_deadlock_report
  • Prijava v revizijo -> prijava
  • Odjava iz revizije -> odjava

14.2 Pretvarjanje definicij sledi

Pretvori obstoječe SQL Server Profiler sledi sejam razširjenih dogodkov tako, da prepozna enakovredne dogodke in konfigurira ustrezne predikate. SSMS nudi pomoč pri pogostih pretvorbah.

Preglejte filtre sledenja in jih pretvorite v predikate razširjenih dogodkov. Dejanja v razširjenih dogodkih nadomestijo stolpce sledenja iz SQL Server Profiler.

14.3 Primerjava zmogljivosti

Razširjeni dogodki zagotavljajo bistveno boljšo zmogljivost kot SQL Server Profiler. Primerjalne študije kažejo, da razširjeni dogodki porabijo manj ciklov procesorja in imajo manjši vpliv na prepustnost transakcij.

Razširjeni dogodki uporabljajo asinhrono obdelavo in optimizirano upravljanje pomnilnika, medtem ko SQL Server Profiler se zanaša na sinhrono zajemanje dogodkov, ki se blokira, dokler se obdelava sledenja ne zaključi.

15. Zaključek

15.1 Povzetek ključnih pojmov

SQL Server Razširjeni dogodki zagotavljajo zmogljiv in lahek okvir za spremljanje in odpravljanje težav SQL ServerArhitektura je sestavljena iz dogodkov, dejanj, predikatov, ciljev in sej, ki skupaj zajamejo ustrezno aktivnost strežnika.

Seje je mogoče ustvariti z uporabo SSMS ali T-SQL, kar ponuja prilagodljivost tako za ad-hoc odpravljanje težav kot za avtomatizirano spremljanje. Več vrst ciljev podpira različne pristope k analizi, od spremljanja v realnem času z ring_buffer do zgodovinske analize z event_file.

Razširjeni dogodki zagotavljajo boljšo zmogljivost v primerjavi z SQL Server Profiler, hkrati pa zagotavlja celovitejše zmogljivosti spremljanja. Sistem omogoča skrbnikom baz podatkov in razvijalcem diagnosticiranje težav, optimizacijo delovanja, izboljšanje varnosti in vzdrževanje skladnosti s predpisi.

15.2 Naslednji koraki in dodatni viri

Za nadaljnji razvoj vašega SQL Server Strokovno znanje XEvents:

  • Implementirajte razširjene dogodke v testnih okoljih za pridobitev praktičnih izkušenj
  • Za celotne kataloge dogodkov in podroben sintaksni priročnik preglejte Microsoftovo dokumentacijo.
  • pridruži se SQL Server forumi skupnosti za učenje iz izkušenj drugih
  • Raziščite napredne scenarije, kot so prilagojeni paketi in integracija s platformami za spremljanje
  • Razviti knjižnico predlog sej za pogoste scenarije spremljanja

16. razdelek s pogostimi vprašanji

V: Kaj so SQL Server Razširjeni dogodki?

A: SQL Server Razširjeni dogodki je lahek sistem za spremljanje učinkovitosti delovanja, integriran v SQL Server Podatkovni mehanizem, ki zajema podrobne informacije o delovanju strežnika z minimalnimi stroški.

V: Kakšna je razlika med razširjenimi dogodki in SQL Server Profiler?

A: Razširjeni dogodki zagotavljajo boljšo zmogljivost, nižje stroške in bolj prilagodljivo konfiguracijo kot SQL Server Profiler. SQL Server Profiler je zastarel in Microsoft priporoča uporabo razširjenih dogodkov za vsa opravila spremljanja.

V: Ali lahko podaljšani dogodki vplivajo SQL Server izvedba?

A: Če so razširjeni dogodki pravilno konfigurirani z ustreznimi predikati in omejitvami virov, imajo minimalen vpliv na zmogljivost. Slaba konfiguracija brez filtriranja lahko vpliva na zmogljivost.

V: Katera dovoljenja so potrebna za ustvarjanje sej razširjenih dogodkov?

A: Za seje na ravni strežnika potrebujete dovoljenje ALTER ANY EVENT SESSION ali dovoljenje CONTROL za bazo podatkov za seje na ravni baze podatkov.

V: Kako si ogledam podatke o razširjenih dogodkih?

O: Uporabi SQL Server Pregledovalnik podatkov v živo v programu Management Studio, poizvedovanje datotek dogodkov s sys.fn_xe_file_target_read_file ali poizvedovanje podatkov medpomnilnika obroča prek DMV-jev.

V: Ali lahko razširjeni dogodki zaznajo poškodbo baze podatkov?

A: Da, razširjeni dogodki lahko zajamejo napake, povezane s korupcijo (823, 824, 825), in dogodke sumljivih strani, kar zagotavlja zgodnje opozorilo o morebitnih težavah s korupcijo.

V: Kakšna je razlika med dogodki, dejanji in predikati?

A: Dogodki so dogodki, ki jih želite spremljati. Dejanja dodajo dodatne informacije zajetim dogodkom. Predikati filtrirajo dogodke na podlagi pogojev, da zmanjšajo količino podatkov.

V: Kako spremljam poizvedbe iz določenih aplikacij ali baz podatkov?

A: V konfiguraciji dogodkov uporabite predikate za filtriranje po imenu baze podatkov, imenu odjemalske aplikacije ali drugih ustreznih poljih.

V: Katere tarče naj uporabim za razširjene dogodke?

A: Za trajno shranjevanje in zgodovinsko analizo uporabite event_file, ring_buffer za spremljanje v realnem času z nizkimi stroški, event_counter za preprosto sledenje frekvencam in histogram za analizo porazdelitve.

V: Ali so razširjeni dogodki na voljo v zbirki podatkov Azure SQL?

A: Da, zbirka podatkov Azure SQL podpira razširjene dogodke na ravni zbirke podatkov, pri čemer so datoteke dogodkov shranjene v shrambi Azure Blob Storage.

V: Kako odpravim težave s sejo razširjenih dogodkov, ki ne zajema podatkov?

A: Preverite, ali je seja zagnana, preverite, ali predikati filtrirajo vse dogodke, potrdite konfiguracijo cilja in preglejte dovoljenja z uporabo sistemskih DMV-jev.

V: Ali lahko avtomatiziram upravljanje razširjenih dogodkov?

O: Da, uporabite SQL Server Naloge agentov za zagon/ustavitev sej, analizo datotek dogodkov, izvajanje pravilnikov hrambe in odzivanje na zaznane pogoje.

Reference


O Author

Yuan Sheng je višji administrator baz podatkov (DBA) z več kot 10 leti izkušenj na področju SQL Server okolja in upravljanje poslovnih baz podatkov. Uspešno je rešil na stotine scenarijev obnovitve baz podatkov v finančnih storitvah, zdravstvu in proizvodnih organizacijah.

Yuan je specializiran za SQL Server obnovitev baze podatkov, rešitve z visoko razpoložljivostjoin optimizacijo delovanja. Njegove bogate praktične izkušnje vključujejo upravljanje večterabajtnih baz podatkov, implementacijo Skupine razpoložljivosti Always Onin razvoj avtomatiziranih strategij varnostnega kopiranja in obnovitve za poslovne sisteme, ki so ključnega pomena za poslovanje.

Yuan se s svojim tehničnim znanjem in praktičnim pristopom osredotoča na ustvarjanje celovitih vodnikov, ki pomagajo skrbnikom baz podatkov in IT-strokovnjakom reševati kompleksne SQL Server učinkovito se spopada z izzivi. Vedno je na tekočem z najnovejšimi SQL Server izdaje in Microsoftove razvijajoče se tehnologije baz podatkov, pri čemer redno testira scenarije obnovitve, da zagotovi, da njegova priporočila odražajo najboljše prakse iz resničnega sveta.

Imate vprašanja o SQL Server obnovitev ali potrebujete dodatna navodila za odpravljanje težav z zbirko podatkov? Yuan pozdravlja povratne informacije in predlogi za izboljšanje teh tehničnih virov.

Skupna raba zdaj: