1. Esittely
1.1 Mitä ovat SQL Server Laajennetut tapahtumat?
SQL Server Extended Events on kevyt suorituskyvyn seurantajärjestelmä, jonka avulla järjestelmänvalvojat ja kehittäjät voivat kerätä ja analysoida yksityiskohtaisia palvelimen toimintatietoja. Tämä järjestelmä on integroitu SQL Server Tietokantamoottori ja tarjoaa kattavat tiedot sekä normaalista toiminnasta että vianmääritystilanteista.
1.2 Miksi käyttää laajennettuja tapahtumia valvontaan?
SQL Server Extended Events tarjoaa useita vakuuttavia etuja tietokannan valvontaan ja vianmääritykseen:
- Kevyen arkkitehtuurin ansiosta suorituskykyyn kohdistuu minimaalinen vaikutus
- Tarkka tiedonkeruun ja tapahtumien suodatuksen hallinta
- Mukautettava tiedonkeruu räätälöidään tiettyihin seurantatarpeisiin
- Mahdollisuus tallentaa tapahtumia useista paketeista samanaikaisesti
- Joustavat suodatusominaisuudet, joiden avulla voit keskittyä olennaisiin toimintoihin
- Tuki tuotantojärjestelmän valvonnalle käyttökokemuksen heikkenemättä
- Kattava suorituskykymittareiden seuranta
- Edistyneet diagnostiikkaominaisuudet vianmääritykseen
- Vaatimustenmukaisuusvaatimusten tarkastusketjun ylläpito
- Reaaliaikaiset ja historialliset data-analyysivaihtoehdot
1.3 Laajennetut tapahtumat vs. SQL Server Profiler
Vaikka SQL Server Profiler on ollut perinteinen valvontatyökalu, mutta MS SQL Extended Events tarjoaa tehokkaamman vaihtoehdon. Extended Events kuluttaa vähemmän järjestelmäresursseja ja tarjoaa paremman skaalautuvuuden tuotantoympäristöissä.
SQL Server Profiler on nyt vanhentunut, ja Microsoft suosittelee siirtymistä laajennettuihin tapahtumiin kaikissa valvontatoiminnoissa.
2. Laajennettujen tapahtumien arkkitehtuurin ymmärtäminen
2.1 Laajennettujen tapahtumien moduulin komponentit
Laajennettujen tapahtumien moottori koostuu useista ydinkomponenteista, jotka toimivat yhdessä tapahtumatietojen keräämiseksi, käsittelemiseksi ja tallentamiseksi. Näiden komponenttien ymmärtäminen auttaa sinua suunnittelemaan tehokkaita valvontaratkaisuja.
- Lähettäjä: Lähettäjäkomponentti koordinoi tapahtumien kulkua tapahtumalähteistä laajennettujen tapahtumien moottoriin. Kun tapahtuma käynnistyy, lähetin vastaanottaa ilmoituksen ja reitittää sen aktiivisiin istuntoihin, jotka ovat tilanneet kyseisen tapahtumatyypin.
- Puskuri: Puskurit tallentavat tapahtumatiedot väliaikaisesti muistiin ennen kohteisiin kirjoittamista. Tämä puskurointimekanismi parantaa suorituskykyä vähentämällä I/O-toimintoja. Puskurin koko ja hallinta-asetukset voidaan määrittää tasapainottamaan muistin käyttö tiedonkeruuvaatimusten kanssa.
- Session: Istunto määrittää tapahtumien seurannan laajuuden. Se määrittää, mitkä tapahtumat tallennetaan, mitä toimintoja suoritetaan, mitä predikaatteja sovelletaan ja minne tulokset tallennetaan. Istuntoja voidaan luoda, muokata, aloittaa ja pysäyttää itsenäisesti.
- Kohdeinstanssi: Kohdeinstanssit edustavat tallennetun tapahtumadatan tallennuskohteita. Jokainen istunto voi kirjoittaa yhteen tai useisiin kohteisiin, kuten tiedostoihin, rengaspuskureihin tai laskureihin. Kohteet käsittelevät ja säilyttävät tapahtumatiedot myöhempää analyysia varten.
2.2 Tapahtumapaketit
SQL Server Extended Events järjestää toiminnallisuuden paketeiksi. Jokainen paketti sisältää toisiinsa liittyviä tapahtumia, toimintoja, tyyppejä, predikaatteja ja kohteita. Yleisiä paketteja ovat sqlserver, sqlos ja package0.
- SQLserver-paketti tarjoaa tietokantakohtaisia tapahtumia, kuten kyselyitä ja tapahtumia.
- SQLOS-paketti sisältää käyttöjärjestelmätapahtumia.
- Paketti 0 tarjoaa yleiskäyttöisiä toimintoja, joita käytetään kaikissa paketeissa.
2.3 Tapahtumatyypit ja -kentät
Tapahtumat edustavat tapahtumia sisällä SQL Server jota haluat seurata. Jokaisella tapahtumatyypillä on valmiiksi määritettyjä kenttiä, jotka tallentavat olennaisia tietoja. Esimerkiksi sql_statement_completed-tapahtuma sisältää kentät kestolle, suorittimen ajalle, luku- ja kirjoitusmäärille.
Tapahtumat voivat olla synkronisia tai asynkronisia. Synkroniset tapahtumat käynnistyvät itse toiminnon aikana, kun taas asynkroniset tapahtumat käynnistyvät sen valmistumisen jälkeen. Tapahtumien ominaisuuksien ymmärtäminen auttaa sinua valitsemaan sopivat tapahtumat valvontatarpeisiisi.
2.4 Toiminnot
Toiminnot lisäävät lisätietoja tallennettuihin tapahtumiin. Kun tapahtuma käynnistyy, siihen liittyvät toiminnot suoritetaan kerätäkseen lisätietoja, kuten SQL-tekstiä, istuntotunnusta tai kutsupinotietoja.
Yleisiä toimintoja ovat sql_text kyselylausekkeiden sieppaamiseen, database_name tietokannan tunnistamiseen ja client_hostname lähtöpalvelimen jäljittämiseen. Toiminnot tarjoavat olennaista kontekstia vianmääritykseen ja analyysiin.
2.5 tavoitetta
Kohteet määrittävät, miten ja minne tapahtumatiedot tallennetaan. SQL Server Laajennetut tapahtumat tukevat useita kohdetyyppejä, mukaan lukien:
- event_file levytallennukseen, tarjoaa pysyvän tallennustilan yksityiskohtaista analyysia varten
- ring_buffer muistipohjaiseen säilytykseen, joka tarjoaa nopean pääsyn viimeaikaisiin tapahtumiin minimaalisella käyttökululla
- tapahtumalaskuri yksinkertaista laskentaa varten
- histogrammi ryhmittelyä varten
- pair_matching korreloivia toisiinsa liittyviä tapahtumia varten
2.6 Predikaatit (suodattimet)
Predikaatit suodattavat tapahtumia määritettyjen ehtojen perusteella, mikä vähentää tallennetun datan määrää. Voit suodattaa tietokannan nimen, sovelluksen nimen, istunnon tunnuksen, kestokynnysten tai minkä tahansa tapahtumakentän arvon mukaan.
Tehokas predikaattien käyttö minimoi suorituskykyvaikutuksen tallentamalla vain asiaankuuluvat tapahtumat. Monimutkaiset predikaatit yhdistävät useita ehtoja loogisten operaattoreiden avulla luodakseen tarkkoja suodatusehtoja.
3. Laajennetut tapahtumaistuntotilat ja elinkaari
3.1 Istuntotilat: CREATE, ALTER ja DROP
Laajennetut tapahtumaistunnot etenevät eri tilojen kautta:
- CREATE EVENT SESSION -lauseke määrittelee uuden istunnon, mutta ei käynnistä sitä. Istunto on pysäytetyssä tilassa, kunnes se aktivoidaan erikseen.
- ALTER EVENT SESSION -lauseke muokkaa istunnon kokoonpanoa tai vaihtaa sen tilaa pysäytetyn ja aloitetun välillä.
- DROP EVENT SESSION -lauseke poistaa istuntomäärityksen kokonaan palvelimelta.
3.2 Istunnon sisältö ja ominaisuudet
Jokainen istunto sisältää kokoelman tapahtumia, toimintoja, kohteita ja predikaatteja. Istunnoilla on implisiittiset rajat, jotka määrittelevät niiden laajuuden ja toiminnan. Määritysvaihtoehdot ohjaavat muistin allokointia, tapahtumien säilytystä ja lähetysviivettä.
Istunnon ominaisuuksiin kuuluvat se, säilyvätkö ne palvelimen uudelleenkäynnistyksen jälkeen, muistin enimmäisvaraus ja miten ne käsittelevät muistipainetta. Nämä asetukset vaikuttavat merkittävästi istunnon toimintaan ja resurssien kulutukseen.
3.3 Istuntorajat ja paketit
Istuntorajat määrittelevät tapahtumien, kohteiden ja pakettien väliset suhteet. Yhden paketin tapahtumat voivat käynnistää toisen paketin toimintoja, mikä tarjoaa joustavuutta tiedonkeruustrategioihin.
Pakettisuhteet mahdollistavat tapahtumien yhdistämisen useista lähteistä yhden istunnon sisällä. Tämä ominaisuus mahdollistaa kattavat valvontaskenaariot, jotka kattavat eri SQL Server alijärjestelmät.
4. Laajennettujen tapahtumaistuntojen luominen SSMS:n avulla
4.1 Edellytykset ja asennus
Ennen luomista SQL Server Laajennetut tapahtumaistunnot, varmista, että sinulla on asianmukaiset käyttöoikeudet. Tarvitset MUUTA KAIKKI TAPAHTUMAISTUNTO -käyttöoikeuden palvelinlaajuisille istunnoille tai OHJAA-käyttöoikeuden tietokantaan tietokannan laajuisille istunnoille.
Varmista, että SQL Server Management Studio on asennettu ja yhdistetty kohdeinstanssiisi. Tutustu valvontavaatimuksiin ja tunnista, mitkä tapahtumat ja kohteet sopivat parhaiten tarpeisiisi.
4.2 Laajennettujen tapahtumien käyttö objektiselaimessa
Pääset SSMS:n laajennettujen tapahtumien käyttöliittymään seuraavasti:
- avoin SQL Server Management Studio ja muodosta yhteys omaan SQL Server ilmentymä.
- Laajenna Objektienhallinnassa videonhallinta -> Laajennetut tapahtumat.
- Laajennetut tapahtumat -solmu sisältää Sessions ja Jäsenyydet kansiot valvonta-asetusten hallintaan.
4.3 Luo uusi istunto
Uuden istunnon luominen:
-
- Napsauta hiiren kakkospainikkeella Sessions kansio alla Laajennetut tapahtumat.
- valita Uusi istunto avataksesi määritysikkunan. Seuraavassa sisällössä tätä menetelmää käytetään uuden istunnon luomiseen.
Huom: Uuden istunnon ohjattu luonti on saatavilla myös opastetumpaan kokemukseen.
4.3.1 Yleinen sivun konfigurointi
On general sivulla, määritä istunnon perusominaisuudet:
- Kirjoita istunnon nimi kohtaan Istunnon nimi kenttä. Käytä kuvaavia nimiä, jotka osoittavat valvonnan tarkoituksen.
- Valitse halutessasi Aloita tapahtumaistunto palvelimen käynnistyksen yhteydessä ottaaksesi käyttöön istunnon automaattisen aktivoinnin.
- Oletusistuntomalli on TyhjäVoit käyttää muita malleja, jos käytät ennalta määritettyä kokoonpanoa.
4.3.2 Tapahtumat-sivun asetukset
Tapahtumat sivulla voit valita, mitä tapahtumia seurataan:
- Valitse Tapahtumat sivu vasemmalta Valitse sivu paneeli.
- In Tapahtumakirjasto, selaa saatavilla olevia tapahtumia tai käytä hakutoimintoa.
- Suodata tapahtumia kirjoittamalla avainsanoja, kuten ”sql_statement_completed”, löytääksesi asiaankuuluvia tapahtumia.
- Valitse haluttu tapahtuma, kuten sql_statement_completed.
- Napsauta oikeaa nuolipainiketta siirtääksesi tapahtuman kohtaan Valitut tapahtumat lista.
4.3.3 Tiedontallennuksen konfigurointi
Levytila sivu määrittää, minne tapahtumatiedot tallennetaan:
- Valitse Levytila sivu vasemmalta Valitse sivu paneeli.
- In Tavoitteet alueella, valitse kohdetyyppi alasvetovalikosta.
(1) tapahtumatiedosto Kohde
event_file-kohde tallentaa tiedot levytiedostoihin, joiden tiedostopääte on .xel:
- valita tapahtumatiedosto kohdetyypin alasvetovalikosta.
- Määritä tiedostopolku, kuten C:\temp\YourSession_Target.xel.
- Määritä rollover-asetukset levytilan hallitsemiseksi asettamalla tiedostojen enimmäiskoko ja -määrä.
- Kohde kirjoittaa tapahtumia jatkuvasti, kunnes istunto pysähtyy tai tallennusrajoitukset saavutetaan.
(2) ring_buffer-kohde
ring_buffer-kohde tallentaa tapahtumat muistiin, jotta niitä voidaan käyttää nopeasti ilman levyn I/O:ta:
- valita rengaspuskuri kohdetyypinä.
- Määritä puskurin enimmäismuistin allokointi.
- Ymmärrä, että vanhemmat tapahtumat hylätään puskurin täyttyessä, joten tämä soveltuu viimeaikaisten tapahtumien seurantaan.
(3) tapahtumalaskuri Kohde
event_counter-kohde yksinkertaisesti laskee tapahtumien esiintymät tallentamatta yksityiskohtaista dataa. Tämä minimoi lisäkustannuksia, kun tarvitset vain taajuustietoja.
(4) histogrammi Kohde
Histogrammi ryhmittelee tapahtumat määritetyn kenttäarvon mukaan, mikä luo jakaumatilastoja. Tämä on hyödyllistä yleisten kuvioiden tai korkeafrekvenssien arvojen tunnistamiseen.
(5) pair_matching-kohde
pair_matching-kohde korreloi toisiinsa liittyviä tapahtumia, kuten lukon hankkimisen ja vapauttamisen. Tämä mahdollistaa paritettujen toimintojen ja niiden ajoitussuhteiden analysoinnin.
KOSKAAN Lisäasetuksia
Lisää sivu tarjoaa istuntotason määritysvaihtoehtoja:
- Valitse Lisää sivu vasemmalta Valitse sivu paneeli.
- Configure Tapahtumien säilytystila hallitsemaan, miten tapahtumia käsitellään muistipaineen alla.
- Asettaa Lähetyksen suurin viive tasapainottaa reaaliaikaisen prosessoinnin järjestelmän suorituskyvyn kanssa.
- Configure Muistin enimmäiskoko ja Tapahtuman enimmäiskoko valvontavaatimustesi perusteella.
- valita Muistin osiotila optimoidakseen yhden tai useamman suorittimen ympäristöjä.
4.4 Tapahtumasuodattimien (predikaattien) määrittäminen
Predikaatit vähentävät datan määrää suodattamalla tapahtumia tiettyjen kriteerien perusteella. Suodattimien määrittäminen:
- On Tapahtumat Valitse -sivulta suodatettava tapahtuma, kuten ”sql_statement_completed”.
- Napauta Configure avataksesi tapahtuman määritysikkunan.
- Valitse Suodatin (predikaatti) Tab.
- In Kenttä Valitse avattavasta valikosta suodatettava kenttä, kuten kesto.
- Valitse operaattori, kuten ”>”.
- Syötä suodatin Arvo, kuten 1000000 (1 sekunti).
- Lisää tarvittaessa ehtoja.
4.5 Toimintojen ja tapahtumakenttien valitseminen
Voit valita kullekin tapahtumalle kerättävät tiedot:
- On Tapahtumat Valitse -sivulta tapahtuma, josta haluat valita tiedot, kuten ”sql_statement_completed”.
- Napauta Configure avataksesi tapahtuman määritysikkunan.
- Valitse Globaalit kentät (toiminnot) Tab.
- Valitse toiminnot lisätietojen, kuten tietokannan_nimen tai asiakassovelluksen_nimen, lisäämiseksi.
- Tarkista Tapahtumakentät osiosta näet, mitkä kentät tallennetaan automaattisesti.
- Tyhjennä tarpeettomat kentät vähentääksesi datamäärää.
4.6 Istuntojen aloittaminen ja hallinta
Kun olet määrittänyt istunnon, voit käynnistää sen ja seurata sen toimintaa:
- Napauta OK istunnon luomiseksi.
- Laajenna Objektienhallinnassa Sessions kansio nähdäksesi uuden istuntosi.
- Napsauta istunnon nimeä hiiren kakkospainikkeella ja valitse Aloita istunto aloittaa tapahtumien tallentaminen.
- Voit tarkastella reaaliaikaisia tietoja napsauttamalla istuntoa hiiren kakkospainikkeella ja valitsemalla Katso reaaliaikaista dataa.
- Lopeta istunto napsauttamalla hiiren kakkospainikkeella ja valitsemalla Lopeta istunto.
5. Laajennettujen tapahtumaistuntojen luominen T-SQL:n avulla
5.1 LUO TAPAHTUMAISTUNTO -syntaksi
Laajennettujen tapahtumaistuntojen luominen T-SQL:llä tarjoaa tarkan hallinnan ja mahdollistaa komentosarjojen kirjoittamisen automaattista käyttöönottoa varten. CREATE EVENT SESSION -lauseke noudattaa tiettyä syntaksirakennetta.
Perussyntaksi sisältää istunnon nimen, ADD EVENT -lauseet kullekin tapahtumalle, ADD TARGET -lauseet tallennuskohteille ja valinnaiset WITH-lauseet istunnon konfigurointia varten.
5.2 Perustapahtumaistunnon luominen
Perusistunto valvoo tiettyjä tapahtumia ja kirjoittaa tulokset kohteeseen. Näin rakennat olennaiset komponentit.
5.2.1 Istunnon nimen ja asetusten määrittäminen
Aloita luomalla istunto kuvaavalla nimellä:
CREATE EVENT SESSION [SampleSession] ON SERVER
ON SERVER -lauseke luo palvelimen laajuisen istunnon, joka säilyy tietokannan muutosten jälkeen. Azure SQL -tietokannan tapauksessa käytä ON DATABASE -lauseketta tietokannan laajuisille istunnoille.
5.2.2 Tapahtumien lisääminen ADD EVENT -toiminnolla
Lisää tallennettavat tapahtumat ADD EVENT -lausekkeella:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Tämä tallentaa kaikki suoritetut SQL-lausekkeet. Voit lisätä useita tapahtumia sisällyttämällä ADD EVENT -lausekkeita.
5.2.3 Tapahtumatoimintojen määrittäminen
Toiminnot keräävät lisätietoja kullekin tapahtumalle. Lisää toiminnot sulkeisiin tapahtuman nimen jälkeen:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Tämä esimerkki tallentaa SQL-tekstin, tietokannan nimen ja käyttäjätunnuksen jokaiselle suoritetulle lausekkeelle.
5.2.4 Tapahtumapredikaattien asettaminen (WHERE-lauseke)
Predikaatit suodattavat tapahtumia datamäärän vähentämiseksi. Käytä WHERE-lauseketta tapahtumamääritelmässä:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Tämä suodattaa lausekkeet, joiden kesto on yli 5 sekuntia (5 000 000 mikrosekuntia).
5.3 Tapahtumakohteiden lisääminen
Kohteet määrittävät, mihin tapahtumatiedot tallennetaan ja miten niitä käsitellään.
5.3.1 Lisää kohde -syntaksi
Lisää kohteet käyttämällä ADD TARGET -lauseketta kaikkien tapahtumien määrittelyn jälkeen:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Etuliite package0 osoittaa, että kohde tulee peruspaketista.
5.3.2 Kohdeparametrien määrittäminen
Jokainen kohdetyyppi hyväksyy tietyt parametrit. Määritä event_file-tiedostolle 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)
)
Tämä kokoonpano luo tiedostoja, joiden koko on enintään 50 Mt, ja ylläpitää enintään viittä tiedostoa rollover-tiedostojen vaihdon jälkeen.
5.4 Istuntoasetukset
WITH-lauseke määrittää istuntotason asetuksia, jotka ohjaavat toimintaa ja resurssien käyttöä.
5.4.1 MAX_MEMORY ja EVENT_RETENTION_MODE
Hallitse muistin allokointia ja tapahtumien käsittelyä paineen alla:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
EVENT_RETENTION_MODE-asetuksia ovat ALLOW_SINGLE_EVENT_LOSS minimaaliselle muistinkäytölle, ALLOW_MULTIPLE_EVENT_LOSS kohtalaiselle ylimääräiselle kuormitukselle ja NO_EVENT_LOSS täydelliselle tietojen säilytykselle potentiaalisen suorituskykyvaikutuksen kustannuksella.
5.4.2 MAKSIMILATENSSI
Aseta enimmäisaika, jonka tapahtumat voivat olla puskureissa ennen kuin ne kirjoitetaan kohteisiin:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Pienemmät arvot tarjoavat enemmän reaaliaikaista dataa lisääntyneiden I/O-toimintojen kustannuksella.
5.4.3 MUISTIOSIOTILA
Optimoi muistin osiointi laitteistokokoonpanollesi:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Vaihtoehtoja ovat NONE yhdelle osiolle, PER_NODE NUMA-järjestelmille ja PER_CPU maksimaalisen samanaikaisuuden saavuttamiseksi usean suorittimen järjestelmissä.
5.5 Istuntojen aloittaminen, lopettaminen ja muuttaminen
Hallitse istunnon tilaa ja konfigurointia ALTER EVENT SESSION -lausekkeiden avulla.
5.5.1 TAPAHTUMAISTUNNON MUUTTAMINEN Käynnistys/Pysäytys-toiminnolle
Aloita istunto luomisen jälkeen:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Pysäytä käynnissä oleva harjoitus:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Olemassa olevien istuntojen muokkaaminen
Muokkaa istunnon asetuksia pysäytettynä. Lisää tapahtumia:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Poista tapahtumat:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Tapahtumaistuntojen poistaminen
Poista istunto kokonaan DROP EVENT SESSION -komennolla:
DROP EVENT SESSION [SampleSession] ON SERVER;
Istunto on keskeytettävä ennen pudottamista.
6. Tapahtumakohteiden yksityiskohtainen käsittely
6.1 event_file Kohdekonfiguraatio
event_file-kohde tarjoaa pysyvän tallennustilan tapahtumatiedoille joustavilla määritysvaihtoehdoilla.
6.1.1 Tiedostopolku ja nimeämiskäytännöt
Määritä tapahtumatiedostojen koko polku ja tiedostonimi:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Käytä laajennetuille tapahtumalokitiedostoille .xel-tiedostotunnistetta. Varmista, että SQL Server Palvelutilillä on kirjoitusoikeudet määritettyyn hakemistoon.
6.1.2 Tiedostojen siirto ja koon hallinta
Määritä automaattinen tiedostojen siirto levytilan hallitsemiseksi:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Kun tiedoston koko saavuttaa 50 Mt, SQL Server Laajennetut tapahtumat luo uuden tiedoston, jonka tiedostopääte on kasvatettu. Kun tiedostojen määrä on 10, vanhin tiedosto korvataan.
6.1.3 Tapahtumatiedoston tietojen lukeminen
Kysele tapahtumatiedoston tietoja sys.fn_xe_file_target_read_file-funktiolla:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Jokerimerkkikuvio lukee kaikki istuntoon liittyvät tiedostot.
6.2 ring_buffer Kohdekäyttö
ring_buffer-kohde tallentaa tapahtumia muistiin, jotta viimeaikaisiin toimintoihin pääsee nopeasti käsiksi.
6.2.1 Muistipohjainen tapahtumien tallennus
Määritä ring_buffer muistipohjaista tallennusta varten:
ADD TARGET package0.ring_buffer
Tapahtumat ovat käytettävissä vain istunnon ollessa aktiivinen ja SQL Server on käynnissä. Tietoja menetetään, kun istunto pysähtyy tai palvelin käynnistyy uudelleen.
6.2.2 Puskurin koko ja konfigurointi
Rengaspuskurin muistin allokoinnin hallinta:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Määritä muisti kilotavuina. Kun puskuri täyttyy, vanhemmat tapahtumat hylätään FIFO-menetelmää käyttäen.
6.2.3 Rengaspuskuritietojen kysely
Käytä rengaspuskuritietoja ajoneuvoverkoissa:
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 sisältää XML-muotoiltuja tapahtumatietoja.
6.3 tapahtumalaskuri Kohde
event_counter-kohde tarjoaa yksinkertaisen laskennan ilman yksityiskohtaista datan tallennusta:
ADD TARGET package0.event_counter
Tämä kohde seuraa tapahtumien tiheyttä minimaalisella lisätyöllä, mikä on hyödyllinen suurten volyymien seurannassa, jossa vain lukemat ovat tärkeitä.
6.4 histogrammi Kohde
Histogrammi ryhmittelee tapahtumat kenttäarvojen mukaan:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Tämä määritys luo histogrammin, joka näyttää tapahtumien jakautumisen tietokannoissa.
6.5 pair_matching-kohde
pair_matching-kohde korreloi toisiinsa liittyviä tapahtumia, kuten lukitusten hankintoja, vapautuksiin:
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'
)
Tämä mahdollistaa paritettujen operaatioiden ja niiden kestojen analysoinnin.
7. Laajennettujen tapahtumatietojen tarkastelu ja analysointi
7.1 SSMS:n käyttö reaaliaikaisten tietojen tarkasteluun
SQL Server Management Studio tarjoaa graafisen käyttöliittymän laajennettujen tapahtumien datan tarkasteluun reaaliajassa:
- Laajenna Objektienhallinnassa videonhallinta -> Laajennetut tapahtumat -> Sessions.
- Napsauta aktiivista istuntoa hiiren kakkospainikkeella.
- valita Katso reaaliaikaista dataa avataksesi reaaliaikaisen datan katseluohjelman.
- Tapahtumat näkyvät ruudukossa sitä mukaa, kun ne tapahtuvat.
- Napsauta yksittäisiä tapahtumia nähdäksesi yksityiskohtaiset kenttäarvot tietoruudussa.
- Käytä työkalupalkin suodattimia keskittyäksesi tiettyihin tapahtumatyyppeihin tai kenttäarvoihin.
7.2 Tapahtumatiedostojen tietojen kysely T-SQL:llä
T-SQL-kyselyt tarjoavat joustavan analyysin tallennetuista tapahtumatiedoista.
7.2.1 sys.fn_xe_file_target_read_file-funktio
Lue tapahtumatiedoston tiedot tällä järjestelmäfunktiolla:
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
);
Funktio palauttaa yhden rivin tapahtumaa kohden XML-muotoilluilla tiedoilla.
7.2.2 XML-tapahtumadatan jäsentäminen
Poimi tiettyjä arvoja XML-tapahtumatiedoista:
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-lausekkeet poimivat yksittäisiä kenttäarvoja XML-rakenteesta.
7.2.3 Tapahtumadatan muuntaminen taulukoiksi
Luo strukturoituja tulosjoukkoja tapahtumatiedoista:
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 Rengaspuskuritietojen kysely
Poimi tiedot ring_buffer-kohteista:
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 Laajennettujen tapahtumien järjestelmänäkymät
SQL Server tarjoaa useita DMV- ja luettelonäkymiä laajennettujen tapahtumaistuntojen hallintaan ja valvontaan.
7.4.1 sys.server_event_sessions
Näytä palvelimelle tallennetut istuntomääritelmät:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Tämä luettelonäkymä näyttää kaikkien määritettyjen istuntojen määritystiedot.
7.4.2 sys.dm_xe_sessions
Näytä tällä hetkellä aktiiviset istunnot:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Tämä DMV tarjoaa ajonaikaista tietoa aktiivisista laajennetuista tapahtumaistunnoista.
7.4.3 sys.dm_xe_session_targets
Näytä aktiivisiin istuntoihin liittyvät tavoitteet:
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 Muita hyödyllisiä ajoneuvoverkoissa
Lisänäkymät tarjoavat kattavat istuntotiedot:
- sys.dm_xe_session_events: Listaa aktiivisten istuntojen tapahtumat
- sys.dm_xe_session_event_actions: Näyttää istuntotapahtumille määritetyt toiminnot
- sys.dm_xe_objects: Luetteloi kaikki käytettävissä olevat tapahtumat, toiminnot ja kohteet
- sys.dm_xe_object_columns: Kullekin tapahtumatyypille käytettävissä olevat tietokentät
- sys.dm_xe_packages: Listaa kaikki laajennetut tapahtumapaketit
8. Käytännön käyttötapauksia ja esimerkkejä
8.1 SQL-lauseen suorittamisen valvonta
SQL-lausekkeiden suorituksen seuranta antaa tietoa kyselymalleista ja suorituskykyominaisuuksista.
8.1.1 sql_statement_completed-tapahtumien seuranta
Luo istunto suoritettujen SQL-lausekkeiden valvomiseksi:
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 Suodatus tietokannan tai sovelluksen mukaan
Keskity tiettyihin tietokantoihin tai sovelluksiin predikaattien avulla:
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 Lukkiutumistietojen kerääminen
Lukkiutumisanalyysi edellyttää yksityiskohtaisten tietojen keräämistä ristiriitaisista tapahtumista.
8.2.1 xml_deadlock_report-tapahtuma
Luo istunto täydellisten lukkiutumiskaavioiden tallentamiseksi:
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 Lukkiutumakaavioiden analysointi
Pura ja analysoi lukkiutumistietoja:
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';
Lukkiutumiskaavio sisältää tietoja prosesseista, resursseista ja uhrien valinnasta.
8.3 Seurantakyselyn suorituskykyongelmat
Tunnista heikosti toimivat kyselyt käyttämällä keston ja resurssien kulutuksen mittareita.
8.3.1 Pitkäkestoisten kyselyiden tunnistus
Tietyt kestokynnykset ylittävien kyselyiden sieppaus:
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 Toteutussuunnitelman analyysi
Suorituskykyanalyysin kyselysuunnitelmien tallennus:
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 Kirjautumis- ja tietoturvatapahtumien valvonta
Seuraa todennus- ja valtuutustoimia tietoturvatarkastusta varten.
8.4.1 Kirjautumisen onnistumisen ja epäonnistumisen seuranta
Seuraa sekä onnistuneita että epäonnistuneita kirjautumisyrityksiä:
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 Käyttöoikeuksien muutokset
Seuraa suojausoikeuksien muutoksia:
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 Tietokantatason valvonta
Tietokantakohtaisten toimintojen ja tilamuutosten valvonta.
8.5.1 Varmuuskopiointi- ja palautustapahtumat
Seuraa varmuuskopiointi- ja palautustoimintoja:
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 Tietokannan tilan muutokset
Tietokannan tilasiirtymien valvonta:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Tietokannan vioittumisen ja eheysongelmien havaitseminen
SQL Server Extended Events tarjoaa varhaisvaroitusominaisuuksia mahdollisten tietokannan vioittumisten havaitsemiseksi, mikä mahdollistaa ennakoivan puuttumisen ennen ongelmien eskaloitumista.
8.6.1 Korruption havaitsemisen kannalta keskeiset tapahtumat
Useat tapahtumat viittaavat mahdolliseen vioittumiseen tai I/O-ongelmiin.
8.6.1.1 error_reported Kriittisten virheiden tapahtuma
error_reported-tapahtuma tallentaa kaikki SQL Server virheet, mukaan lukien korruptioon liittyvät virhenumerot:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Virhe 823 ilmaisee I/O-virheitä, 824 loogisen yhtenäisyyden virheitä ja 825 raportoi lukuyritysten onnistumisista, jotka voivat viitata laitteisto-ongelmiin.
8.6.1.2 database_uspect_data_page Tapahtuma
Tämä tapahtuma käynnistyy, kun SQL Server kohtaa epäilyttävän sivun:
ADD EVENT sqlserver.database_suspect_data_page
Epäilyttävät sivut osoittavat mahdollista vioittumista ja ne kirjataan msdb.dbo.suspect_pages-taulukkoon.
8.6.1.3 errorlog_written Tapahtuma
Tallenna kirjoitetut merkinnät SQL Server virheloki:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Korruption seurantaistunnon luominen
Laadi kattava korruption havaitsemista ja seurantaa koskeva istunto.
8.6.2.1 Korruptiovirhenumeroiden suodatus (823, 824, 825)
Luo kohdennettu istunto, jossa keskitytään korruption indikaattoreihin:
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 Sopivien vakavuustasojen asettaminen
Sisällytä vakavat virheet, jotka voivat viitata korruptioon:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Vakavuusaste 20 ja sitä korkeampi osoittaa järjestelmätason ongelmia, jotka usein liittyvät korruptioon.
8.6.2.3 Tapahtumatiedoston kohteen määrittäminen hälytyksille
Tallenna vioittumistapahtumat analysointia ja hälytyksiä varten:
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 Korruptiotapahtumien tietojen analysointi
Erottaa ja tulkita korruptioon liittyviä tapahtumia tallennetusta datasta.
8.6.3.1 Epäilyttävien sivujen tunnistaminen
Kysely database_suspect_data_page-tapahtumille:
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 Virhetietojen ja kontekstin poimiminen
Analysoi error_reported-tapahtumia vioittumismallien varalta:
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 Integrointi DBCC CHECKDB:n kanssa
Käytä laajennettuja tapahtumatietoja apunasi DBCC TARKISTUSB suoritus.
8.6.4.1 DBCC CHECKDB:n käynnistäminen tapahtumien perusteella
Kun vioittumistapahtumia havaitaan, suorita DBCC CHECKDB kattavaa validointia varten:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Extended Events tarjoaa ennakkovaroituksen, kun taas DBCC CHECKDB suorittaa perusteellisen validoinnin.
8.6.4.2 Automatisoidut korruptiontorjuntaprosessit
Toteuta automaattiset vastaukset valvomalla tapahtumatiedostoa:
- Configure SQL Server Agentin tehtävänä on säännöllisesti tehdä kysely vioittumisen valvontatapahtumatiedostosta.
- Kun vioittumistapahtumia löytyy, suorita DBCC CHECKDB -komento kyseisessä tietokannassa.
- Lähetä sähköposti-ilmoituksia tietokantojen ylläpitäjille tapahtumatiedoilla ja DBCC CHECKDB -tuloksilla.
- Kirjaa löydökset keskitettyyn seurantataulukkoon trendianalyysia varten.
8.6.4.3 Ennakoivan valvonnan ja suorituskyvyn tasapainottaminen
Extended Events tarjoaa vähän lisäkuormitusta vaativan vioittumisen tunnistuksen verrattuna tiheään DBCC CHECKDB -suoritukseen:
- Suorita laajennettuja tapahtumia jatkuvasti reaaliaikaista vioittumisen havaitsemista varten
- Suorita DBCC CHECKDB vain, kun vioittumisindikaattoreita ilmenee.
- Aikatauluta säännöllinen DBCC CHECKDB huoltojaksojen aikana
- Käytä laajennettuja tapahtumia tunnistaaksesi tietokannat, jotka vaativat välitöntä huomiota
Tämä lähestymistapa tarjoaa ennakoivaa valvontaa ilman jatkuvien eheystarkistusten merkittävää resurssien kulutusta.
8.6.4.4 Korjaa vioittunut tietokanta
Jos tietokannassa havaitaan vioittumisia, voit korjata pienet vioittumiset DBCC CHECKDB -työkalulla. Jos se epäonnistuu, voit kokeilla kolmannen osapuolen työkalua. SQL-tietokannan palautustyökalu, joka yleensä tarjoaa korkeamman palautusprosentin vakavasti vioittuneille tietokannoille.
9. Palvelinlaajuiset vs. tietokantalaajuiset laajennetut tapahtumat
9.1 Palvelimen laajuiset tapahtumaistunnot
Palvelinlaajuiset istunnot valvovat toimintaa koko alueella SQL Server ilmentymä. Nämä istunnot luodaan ON SERVER -lausekkeella ja ne säilyvät päätietokannassa.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Palvelinlaajuiset istunnot tallentavat tapahtumia kaikista tietokannoista ja sopivat instanssitason valvontaan.
9.2 Tietokannan laajuiset tapahtumaistunnot (Azure SQL Database)
Tietokannan laajuiset istunnot rajoittuvat yhteen tietokantaan, ja niitä käytetään pääasiassa Azure SQL -tietokannassa, jossa palvelintason käyttöoikeudet ovat rajoitettuja:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
Azure SQL -tietokannassa tapahtumatiedostot tallennetaan Azure Blob Storageen paikallisten tiedostojärjestelmien sijaan.
9.3 Erot ja käyttötapaukset
Palvelintason istunnot tarjoavat kattavan valvonnan kaikissa tietokannoissa, mutta vaativat laajennettuja käyttöoikeuksia. Tietokantatason istunnot tarjoavat eristyksen ja sopivat tiettyjen sovellusten tai vuokralaisten valvontaan.
Käytä palvelimen laajuisia istuntoja keskitettyyn valvontaan, tietokantojen suorituskyvyn vianmääritykseen ja tietoturvan auditointiin. Käytä tietokannan laajuisia istuntoja Azure SQL -tietokannassa, usean vuokraajan ympäristöissä tai delegoidessasi valvontavastuita sovellustiimeille.
10. Laajennetut tapahtumat Azure SQL -tietokannassa
10.1 Azure-kohtaisia huomioitavia asioita
Azure SQL Database toteuttaa laajennettuja tapahtumia joillakin eroilla paikallisiin ratkaisuihin verrattuna SQL ServerIstunnot ovat oletusarvoisesti tietokantakohtaisia, ja tapahtumatiedostojen tallennustila käyttää Azure Blob Storagea paikallisten tiedostojärjestelmien sijaan.
Azure Blob Storagen todennus edellyttää tapahtumatiedostokohteessa määritettyä SAS-tunnusta. Yhteysmerkkijonot viittaavat tallennustilille ja -säilöön, johon tapahtumatiedostot on tallennettu.
10.2 Käytettävissä olevat kohteet Azuressa
Azure SQL Database tukee näitä laajennettuja tapahtumakohteita:
- event_file: Kirjoittaa Azure Blob Storageen
- ring_buffer: Muistipohjainen tallennustila, jolla on sama toiminta kuin paikallisella tallennustilalla
- event_counter: Laskee tapahtumien esiintymiset
Kohde event_file vaatii konfiguroinnin Azure Blob Storagen tunnistetiedoilla:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Tietokantalaajuisten istuntojen luominen
Luo istunto Azure SQL -tietokannassa:
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;
Tietokannan laajuiset istunnot Azuressa toimivat samalla tavalla kuin palvelimen laajuiset paikalliset istunnot, mutta niiden laajuus rajoittuu nykyiseen tietokantaan.
11. Parhaat käytännöt ja suorituskyvyn optimointi
11.1 Suorituskykyyn kohdistuvien vaikutusten minimointi
Laajennetut tapahtumat on suunniteltu minimoimaan ylimääräistä kuormitusta, mutta virheellinen konfigurointi voi vaikuttaa suorituskykyyn. Noudata näitä ohjeita:
- Käytä tiettyjä predikaatteja tapahtumien suodattamiseen kaiken tallentamisen sijaan
- Vältä tarpeettomien toimintojen keräämistä, jotka lisäävät prosessointikustannuksia
- Valitse sopivat kohteet tietojen säilytystarpeiden perusteella
- Aseta kohtuulliset puskurikoot ja lähetysviiveet
- Istuntoresurssien kulutuksen seuranta DMV-tiedostojen avulla
11.2 Oikeiden tapahtumien ja suodattimien valitseminen
Valitse tapahtumia, jotka liittyvät suoraan valvontatavoitteisiisi. Vältä usein esiintyviä tapahtumia, ellei se ole välttämätöntä, ja käytä aina predikaatteja datamäärän vähentämiseksi.
Esimerkiksi kaikkien sql_statement_completed-tapahtumien tallentamisen sijaan voit suodattaa tiettyjen tietokantojen tai kestokynnysten mukaan:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Kohteen valintaohjeet
Valitse kohteet analyysivaatimustesi perusteella:
- Käytä event_file-tiedostoa yksityiskohtaiseen historia-analyysiin ja pitkäaikaiseen säilytykseen
- Käytä ring_bufferia reaaliaikaiseen valvontaan minimoimalla I/O-vaikutus
- Käytä event_counter-ominaisuutta, kun vain taajuudella on merkitystä
- Käytä histogrammia jakauma-analyysiin
- Käytä pair_matching-funktiota korreloituneiden tapahtumien analyysiin
11.4 Istunnon konfigurointisuositukset
Määritä istunnot asianmukaisilla resurssirajoituksilla:
- Aseta MAX_MEMORY odotetun tapahtumamäärän ja palvelinresurssien perusteella
- Käytä ALLOW_SINGLE_EVENT_LOSS-ominaisuutta useimmissa tilanteissa minimaaliseen lisäkuluun.
- Aseta MAX_DISPATCH_LATENCY tasapainottaaksesi reaaliaikaiset tarpeet suorituskyvyn kanssa
- Käytä PER_CPU-muistin osiointia moniprosessorijärjestelmissä
- Vältä STARTUP_STATE=ON-asetusta, ellei jatkuvaa valvontaa tarvita.
11.5 Tapahtumatiedostojen koon ja säilytyksen hallinta
Määritä tiedostojen siirto estääksesi rajoittamattoman levynkäytön:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Tämä kokoonpano ylläpitää noin 1 Gt tapahtumadataa (10 tiedostoa × 100 Mt). Säädä säilytysvaatimustesi ja käytettävissä olevan tallennustilan mukaan.
12. Laajentuneiden tapahtumien vianmääritys
12.1 Yleiset ongelmat ja ratkaisut
Yleisiä laajennettujen tapahtumien ongelmia ovat istuntojen tietojen tallentamattomat olosuhteet, suorituskyvyn heikkeneminen, tiedostokohdeongelmat ja istunnon odottamaton toiminta.
12.2 Istunto ei tallenna tietoja
Jos istunto ei tallenna odotettuja tapahtumia:
- Varmista, että istunto on aloitettu sys.dm_xe_sessions-komennolla.
- Tarkista predikaatit varmistaaksesi, etteivät ne suodata kaikkia tapahtumia pois.
- Varmista tapahtumien käynnistyminen poistamalla suodattimet väliaikaisesti.
- Tarkista käyttöoikeudet varmistaaksesi, että sinulla on oikeus tarkastella istuntotietoja.
- Tarkista, että kohteen konfiguraatio on oikein ja että siihen voi kirjoittaa.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Suorituskyvyn heikkeneminen
Jos laajennetut tapahtumat aiheuttavat suorituskykyongelmia:
- Lisää predikaatteja tapahtumien määrän vähentämiseksi.
- Poista tarpeettomat toimenpiteet, jotka keräävät lisätietoja.
- Vähennä kirjoitustiheyttä lisäämällä MAX_DISPATCH_LATENCY-arvoa.
- Muuta EVENT_RETENTION_MODE arvoksi ALLOW_SINGLE_EVENT_LOSS.
- Harkitse ring_buffer-funktion käyttöä event_file-funktion sijaan usein esiintyvien tapahtumien yhteydessä.
12.4 Tiedostokohteen ongelmat
Tiedostokohteen ongelmat liittyvät usein käyttöoikeuksiin tai levytilaan:
- Varmista SQL Server Palvelutilillä on kirjoitusoikeudet kohdehakemistoon.
- Varmista, että levytilaa on riittävästi.
- Tarkista, että määritetty polku on olemassa ja käytettävissä.
- Tarkista tiedostojen siirron asetukset, jos tiedostot eivät siirry odotetulla tavalla.
12.5 Virheenkorjaus järjestelmänäkymien avulla
Käytä ajoneuvohallintoyksiköitä (DMV) pitkäaikaisten tapahtumien ongelmien diagnosointiin:
-- 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. Lisäaiheet
13.1 Mukautettujen tapahtumapakettien luominen
Kokeneet käyttäjät voivat luoda mukautettuja tapahtumapaketteja laajentaakseen SQL Server Laajennettu tapahtumatoiminto. Tämä vaatii C++-kehitystä ja integrointia SQL Server laajennettavuuskehys.
Mukautetut paketit mahdollistavat sovelluskohtaisten tapahtumien valvonnan tai kolmannen osapuolen valvontajärjestelmien integroinnin Extended Events -infrastruktuuriin.
13.2 Tapahtumaistuntojen mallit
SSMS tarjoaa sisäänrakennettuja malleja yleisiin valvontaskenaarioihin. Käytä malleja luodessasi uusia istuntoja ohjatun toiminnon kautta:
- Napsauta Uusi istunto -valintaikkunassa Sapluuna pudotusvalikosta.
- Valitse käytettävissä olevista malleista, kuten Kyselytietojen seuranta tai Järjestelmän tila.
- Muokkaa mallipohjaa vastaamaan erityisvaatimuksiasi.
13.3 Integrointi valvontaratkaisuihin
Laajennetut tapahtumatiedot voivat syöttää yrityksen valvontaratkaisuihin:
- Vie tapahtumatiedot keskitettyihin lokijärjestelmiin
- Jäsennä tapahtumatiedostot ja lataa tiedot valvontatietokantoihin
- Luo mukautettuja koontinäyttöjä BI-työkaluilla
- Käynnistä hälytykset tiettyjen tapahtumamallien perusteella
- korreloida SQL Server tapahtumat, joissa on sovellus- ja infrastruktuurimittareita
13.4 Automaatio ja aikataulutus
Automatisoi laajennettujen tapahtumien hallinta käyttämällä SQL Server Agentti:
- Luo töitä istuntojen aloittamiseksi/lopettamiseksi tiettyinä aikaikkunoina
- Aikatauluta tapahtumatiedostojen analysointi ja raportointi
- Toteuta tietojen säilytyskäytäntöjä arkistoimalla tai poistamalla vanhoja tapahtumatiedostoja
- Automatisoi reagointi havaittuihin tiloihin, kuten suorituskykyongelmiin tai tietoturvatapahtumiin
14. Muuttoliike SQL Server Profiler
14.1 SQL Server Profiler-tapahtumien yhdistäminen laajennettuihin tapahtumiin
Microsoft tarjoaa kartoituksen SQL Server Profiler tapahtumat ja laajennetut tapahtumat. Yleisiä määrityksiä ovat:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:EränKäynnistys -> sql_batch_käynnistys
- SQL:StmtCompleted -> sql_lausekkeen_completed
- SQL:StmtStarting -> sql_lausekkeen_aloitus
- Lukkiutumiskaavio -> xml_deadlock_report
- Auditointikirjautuminen -> kirjaudu sisään
- Auditointi Kirjaudu ulos -> Kirjaudu ulos
14.2 Jäljitysmääritelmien muuntaminen
Muunna olemassa oleva SQL Server Profiler jäljittää Extended Events -istuntoja tunnistamalla vastaavat tapahtumat ja määrittämällä asianmukaiset predikaatit. SSMS tarjoaa apua yleisiin muunnoksiin.
Tarkista jäljityssuodattimet ja muunna ne laajennettujen tapahtumien predikaateiksi. Laajennettujen tapahtumien toiminnot korvaavat jäljityssarakkeet SQL Server Profileri.
14.3 Suorituskyvyn vertailu
Laajennetut tapahtumat tarjoavat huomattavasti paremman suorituskyvyn kuin SQL Server Profiler. Vertailututkimukset osoittavat, että Extended Events kuluttaa vähemmän suorittimen syklejä ja vaikuttaa vähemmän tapahtumien läpimenoon.
Laajennetut tapahtumat käyttävät asynkronista prosessointia ja optimoitua muistinhallintaa, kun taas SQL Server Profiler käyttää synkronista tapahtumien sieppausta, joka estää toiminnan, kunnes jäljitysprosessi on valmis.
15. Päätelmä
15.1 Yhteenveto keskeisistä käsitteistä
SQL Server Extended Events tarjoaa tehokkaan ja kevyen kehyksen valvontaan ja vianmääritykseen SQL ServerArkkitehtuuri koostuu tapahtumista, toiminnoista, predikaateista, kohteista ja istunnoista, jotka toimivat yhdessä tallentaakseen asiaankuuluvaa palvelintoimintaa.
Istuntoja voidaan luoda SSMS:n tai T-SQL:n avulla, mikä tarjoaa joustavuutta sekä ad-hoc-vianmääritykseen että automatisoituun valvontaan. Useat kohdetyypit tukevat erilaisia analyysimenetelmiä reaaliaikaisesta valvonnasta ring_bufferilla historialliseen analyysiin event_file:lla.
Extended Events tarjoaa paremman suorituskyvyn verrattuna SQL Server Profiler tarjoaa samalla kattavammat valvontaominaisuudet. Järjestelmän avulla tietokannan ylläpitäjät ja kehittäjät voivat diagnosoida ongelmia, optimoida suorituskykyä, parantaa tietoturvaa ja ylläpitää vaatimustenmukaisuutta.
15.2 Seuraavat vaiheet ja lisäresurssit
Jatkaaksesi oman SQL Server XEventsin asiantuntemus:
- Toteuta laajennetut tapahtumat testiympäristöissä käytännön kokemuksen saamiseksi
- Tutustu Microsoftin dokumentaatioon saadaksesi täydelliset tapahtumaluettelot ja yksityiskohtaiset syntaksiohjeet.
- Liity SQL Server yhteisöfoorumit, joissa voi oppia muiden kokemuksista
- Tutustu edistyneisiin skenaarioihin, kuten mukautettuihin paketteihin ja integrointiin valvonta-alustojen kanssa
- Kehitä istuntomallien kirjasto yleisiä valvontaskenaarioita varten
16 Usein kysytyt kysymykset -osio
K: Mitä ovat SQL Server Laajennetut tapahtumat?
A: SQL Server Extended Events on kevyt suorituskyvyn seurantajärjestelmä, joka on integroitu SQL Server Tietokantamoottori, joka tallentaa yksityiskohtaista tietoa palvelimen toiminnasta minimaalisella lisätyöllä.
K: Miten laajennetut tapahtumat eroavat muista SQL Server Profiloija?
A: Laajennetut tapahtumat tarjoavat paremman suorituskyvyn, pienemmät käyttökustannukset ja joustavamman konfiguroinnin kuin SQL Server Profileri. SQL Server Profiler on vanhentunut, ja Microsoft suosittelee Extended Eventsin käyttöä kaikissa valvontatehtävissä.
K: Voivatko laajennetut tapahtumat vaikuttaa SQL Server esitys?
A: Kun Extended Events -tapahtumat on määritetty oikein asianmukaisilla predikaateilla ja resurssirajoituksilla, niillä on minimaalinen vaikutus suorituskykyyn. Huono määritys ilman suodatusta voi vaikuttaa suorituskykyyn.
K: Mitä käyttöoikeuksia tarvitaan laajennettujen tapahtumaistuntojen luomiseen?
A: Tarvitset palvelimen laajuisille istunnoille MUUTA KAIKKI TAPAHTUMA -ISTUNTO -oikeuden tai tietokannan CONTROL-oikeuden tietokannan laajuisille istunnoille.
K: Miten voin tarkastella laajennettujen tapahtumien tietoja?
V: Käytä SQL Server Management Studion reaaliaikaisen datan katseluohjelma, tapahtumatiedostojen kysely sys.fn_xe_file_target_read_file-tiedostolla tai rengaspuskuritietojen kysely DMV:iden kautta.
K: Voivatko laajennetut tapahtumat havaita tietokannan vioittumisen?
V: Kyllä, laajennetut tapahtumat voivat tallentaa vioittumiseen liittyviä virheitä (823, 824, 825) ja epäilyttäviä sivutapahtumia, mikä antaa varhaisen varoituksen mahdollisista vioittumisongelmista.
K: Mitä eroa on tapahtumilla, toimilla ja predikaateilla?
A: Tapahtumat ovat tapahtumia, joita haluat seurata. Toiminnot lisäävät lisätietoja tallennettuihin tapahtumiin. Predikaatit suodattavat tapahtumia ehtojen perusteella datamäärän vähentämiseksi.
K: Miten voin valvoa tiettyjen sovellusten tai tietokantojen kyselyitä?
A: Käytä tapahtumakonfiguraatiossasi predikaatteja suodattaaksesi database_name-, client_app_name- tai muiden asiaankuuluvien kenttien mukaan.
K: Mitä tavoitteita minun pitäisi käyttää laajennetuissa tapahtumissa?
A: Käytä event_file-tiedostoa pysyvään tallennukseen ja historialliseen analyysiin, ring_buffer-tiedostoa reaaliaikaiseen seurantaan pienellä kuormalla, event_counter-tiedostoa yksinkertaiseen taajuuksien seurantaan ja histogramm-tiedostoa jakauma-analyysiin.
K: Ovatko laajennetut tapahtumat käytettävissä Azure SQL -tietokannassa?
V: Kyllä, Azure SQL Database tukee tietokannan laajuisia laajennettuja tapahtumia, joiden tapahtumatiedostot on tallennettu Azure Blob Storageen.
K: Miten teen vianmäärityksen laajennettujen tapahtumien istunnossa, joka ei tallenna tietoja?
A: Varmista, että istunto on aloitettu, tarkista, että predikaatit eivät suodata kaikkia tapahtumia, vahvista kohteen kokoonpano ja tarkista käyttöoikeudet järjestelmän DMV-tiedostojen avulla.
K: Voinko automatisoida laajennettujen tapahtumien hallinnan?
V: Kyllä, käytä SQL Server Agenttityöt istuntojen aloittamiseksi/lopettamiseksi, tapahtumatiedostojen analysoimiseksi, säilytyskäytäntöjen toteuttamiseksi ja havaittuihin olosuhteisiin reagoimiseksi.
Viitteet
- Pika-aloitus: Laajennetut tapahtumat SQL Server – Microsoft Learn
- Laajennettu tapahtumien yleiskatsaus – Microsoft Learn
- SQL Server Laajennetut tapahtumat – Microsoft Learn
- Pitkäaikaisten tapahtumien tavoitteet SQL Server – Microsoft Learn
- SQL Server Laajennettu tapahtumamoottori – Microsoft Learn
- SQL Server Profiloija: Täydellinen opas
- DBCC CHECKDB: Täydellinen opas
- DataNumen SQL Recovery
kirjailijasta
Yuan Sheng on kokenut tietokannan ylläpitäjä (DBA), jolla on yli 10 vuoden kokemus alalta SQL Server ympäristöissä ja yritystietokantojen hallinnassa. Hän on onnistuneesti ratkaissut satoja tietokantojen palautustilanteita rahoituspalveluissa, terveydenhuollossa ja valmistusorganisaatioissa.
Yuan on erikoistunut SQL Server tietokannan palautus, korkean käytettävyyden ratkaisutja suorituskyvyn optimointia. Hänen laaja käytännön kokemus kattaa usean teratavun tietokantojen hallinnan, käyttöönoton Aina käytettävissä olevat ryhmätja kehittämällä automatisoituja varmuuskopiointi- ja palautusstrategioita kriittisille liiketoimintajärjestelmille.
Teknisen asiantuntemuksensa ja käytännönläheisen lähestymistapansa avulla Yuan keskittyy luomaan kattavia oppaita, jotka auttavat tietokannan ylläpitäjiä ja IT-ammattilaisia ratkaisemaan monimutkaisia ongelmia. SQL Server haastaa tehokkaasti. Hän pysyy ajan tasalla uusimmista SQL Server julkaisuja ja Microsoftin kehittyviä tietokantateknologioita, testaten säännöllisesti palautusskenaarioita varmistaakseen, että hänen suosituksensa vastaavat todellisia parhaita käytäntöjä.
Onko sinulla kysyttävää SQL Server palautus tai tarvitsetko lisäohjeita tietokannan vianmääritykseen? Yuan toivottaa sinut tervetulleeksi palautetta ja ehdotuksia näiden teknisten resurssien parantamiseksi.

















