1. Innledning
1.1 Hva er SQL Server Utvidede arrangementer?
SQL Server Extended Events er et lett system for ytelsesovervåking som lar administratorer og utviklere samle inn og analysere detaljerte data om serveraktivitet. Dette systemet er integrert i SQL Server Databasemotor og gir omfattende innsikt i både normal drift og feilsøkingsscenarioer.
1.2 Hvorfor bruke utvidede hendelser for overvåking?
SQL Server Utvidede hendelser tilbyr flere overbevisende fordeler for databaseovervåking og feilsøking:
- Minimal ytelsespåvirkning med lettvektsarkitektur
- Granulær kontroll over datainnsamling og hendelsesfiltrering
- Tilpassbar datainnsamling skreddersydd til spesifikke overvåkingsbehov
- Mulighet for å fange opp hendelser fra flere pakker samtidig
- Fleksible filtreringsmuligheter for å fokusere på relevante operasjoner
- Støtte for overvåking av produksjonssystemer uten å forringe brukeropplevelsen
- Omfattende sporing av ytelsesmålinger
- Avanserte diagnostiske funksjoner for feilsøking
- Vedlikehold av revisjonsspor for samsvarskrav
- Alternativer for analyse av sanntids- og historiske data
1.3 Utvidede hendelser vs. SQL Server Profiler
Samtidig som SQL Server Profiler har vært et tradisjonelt overvåkingsverktøy, men MS SQL Extended Events tilbyr et mer effektivt alternativ. Extended Events bruker færre systemressurser og gir bedre skalerbarhet for produksjonsmiljøer.
SQL Server Profiler er nå avskrevet, og Microsoft anbefaler å migrere til utvidede hendelser for alle overvåkingsaktiviteter.
2. Forstå arkitekturen for utvidede hendelser
2.1 Komponenter i motoren for utvidede hendelser
Extended Events-motoren består av flere kjernekomponenter som samarbeider for å fange opp, behandle og lagre hendelsesdata. Å forstå disse komponentene hjelper deg med å designe effektive overvåkingsløsninger.
- Avsender: Dispatcher-komponenten koordinerer hendelsesflyten fra hendelseskilder til Extended Events-motoren. Når en hendelse utløses, mottar dispatcheren varselet og ruter det til aktive økter som abonnerer på den spesifikke hendelsestypen.
- buffer: Buffere lagrer hendelsesdata midlertidig i minnet før de skrives til mål. Denne buffermekanismen forbedrer ytelsen ved å redusere I/O-operasjoner. Bufferstørrelse og administrasjonsinnstillinger kan konfigureres for å balansere minnebruk med datafangstkrav.
- Økt: En økt definerer omfanget av hendelsesovervåking. Den spesifiserer hvilke hendelser som skal registreres, hvilke handlinger som skal utføres, hvilke predikater som skal brukes, og hvor resultatene skal lagres. Økter kan opprettes, endres, startes og stoppes uavhengig av hverandre.
- Målforekomst: Målforekomster representerer lagringsdestinasjonene for innsamlede hendelsesdata. Hver økt kan skrive til ett eller flere mål, for eksempel filer, ringbuffere eller tellere. Mål behandler og lagrer hendelsesinformasjonen for senere analyse.
2.2 Arrangementspakker
SQL Server Utvidede hendelser organiserer funksjonalitet i pakker. Hver pakke inneholder relaterte hendelser, handlinger, typer, predikater og mål. Vanlige pakker inkluderer sqlserver, sqlos og package0.
- SQLserver-pakken tilbyr databasespesifikke hendelser som spørringer og transaksjoner.
- Sqlos-pakken inneholder hendelser i operativsystemet.
- Pakken0 tilbyr generell funksjonalitet som brukes på tvers av alle pakker.
2.3 Hendelsestyper og felt
Hendelser representerer forekomster innenfor SQL Server som du vil overvåke. Hver hendelsestype har forhåndsdefinerte felt som registrerer relevant informasjon. For eksempel inkluderer sql_statement_completed-hendelsen felt for varighet, CPU-tid, lesing og skriving.
Hendelser kan være synkrone eller asynkrone. Synkrone hendelser utløses under selve operasjonen, mens asynkrone hendelser utløses etter fullføring. Å forstå hendelseskarakteristikker hjelper deg med å velge passende hendelser for dine overvåkingsbehov.
2.4 handlinger
Handlinger legger til tilleggsinformasjon til registrerte hendelser. Når en hendelse utløses, utføres tilknyttede handlinger for å samle inn ytterligere kontekst, for eksempel SQL-tekst, økt-ID eller informasjon om kallestakk.
Vanlige handlinger inkluderer sql_text for å fange opp spørresetninger, database_name for å identifisere databasen og client_hostname for å spore den opprinnelige serveren. Handlinger gir viktig kontekst for feilsøking og analyse.
2.5 Mål
Mål bestemmer hvordan og hvor hendelsesdata lagres. SQL Server Utvidede hendelser støtter flere måltyper, inkludert:
- event_file for disklagring, som gir permanent lagring for detaljert analyse
- ring_buffer for minnebasert oppbevaring, som gir rask tilgang til nylige hendelser med minimal overhead
- event_counter for enkel telling
- histogram for gruppering
- pair_matching for å korrelere relaterte hendelser
2.6 Predikater (filtre)
Prediserer filtrering av hendelser basert på spesifiserte betingelser, noe som reduserer volumet av innsamlede data. Du kan filtrere etter databasenavn, programnavn, økt-ID, varighetsterskler eller en hvilken som helst verdi i hendelsesfeltet.
Effektiv bruk av predikater minimerer ytelsespåvirkningen ved kun å fange opp relevante hendelser. Komplekse predikater kombinerer flere betingelser ved hjelp av logiske operatorer for å lage presise filtreringskriterier.
3. Utvidede hendelsesøktstilstander og livssyklus
3.1 Økttilstander: OPPRETT, ENDR og SLIP
Utvidede hendelsesøkter går gjennom forskjellige tilstander:
- CREATE EVENT SESSION-setningen definerer en ny økt, men starter den ikke. Økten er stoppet inntil den eksplisitt aktiveres.
- ALTER EVENT SESSION-setningen endrer øktkonfigurasjonen eller endrer statusen mellom stoppet og startet.
- DROP EVENT SESSION-setningen fjerner sesjonsdefinisjonen fullstendig fra serveren.
3.2 Innhold og kjennetegn ved økten
Hver økt inneholder en samling av hendelser, handlinger, mål og predikater. Økter har implisitte grenser som definerer omfanget og oppførselen deres. Konfigurasjonsalternativer kontrollerer minneallokering, hendelsesoppbevaring og forsendelsesforsinkelse.
Øktegenskaper inkluderer om de vedvarer etter omstart av serveren, maksimal minneallokering og hvordan de håndterer minnetrykk. Disse innstillingene påvirker øktens virkemåte og ressursforbruk betydelig.
3.3 Øktgrenser og pakker
Øktgrenser definerer forholdet mellom hendelser, mål og pakker. Hendelser fra én pakke kan utløse handlinger fra en annen pakke, noe som gir fleksibilitet i datainnsamlingsstrategier.
Pakkerelasjoner lar deg kombinere hendelser fra flere kilder i én økt. Denne funksjonen muliggjør omfattende overvåkingsscenarier som spenner over forskjellige SQL Server delsystemer.
4. Opprette utvidede hendelsesøkter ved hjelp av SSMS
4.1 Forutsetninger og oppsett
Før du oppretter SQL Server For utvidede hendelsesøkter, sørg for at du har nødvendige tillatelser. Du trenger tillatelsen ALTER ANY EVENT SESSION for server-scoped sesjoner eller CONTROL-tillatelsen på databasen for database-scoped sesjoner.
Bekreft det SQL Server Management Studio er installert og koblet til målinstansen din. Gjør deg kjent med overvåkingskravene og identifiser hvilke hendelser og mål som passer best til dine behov.
4.2 Tilgang til utvidede hendelser i Object Explorer
For å få tilgang til grensesnittet for utvidede hendelser i SSMS, følg disse trinnene:
- Open SQL Server Management Studio og koble til din SQL Server forekomst.
- I Objektutforsker, utvid Administrasjon -> Utvidede arrangementer.
- Noden Utvidede hendelser inneholder Økter og Nettsidepakker mapper for å administrere overvåkingskonfigurasjonene dine.
4.3 Opprett en ny økt
For å opprette en ny økt:
-
- Høyreklikk på Økter mappe under Utvidede arrangementer.
- Velg Ny sesjon for å åpne konfigurasjonsdialogboksen. Følgende innhold vil bruke denne metoden til å opprette en ny økt.
Merk: Ny øktveiviser er også tilgjengelig for en mer guidet opplevelse.
4.3.1 Generell sidekonfigurasjon
På Informasjon side, konfigurer grunnleggende øktegenskaper:
- Skriv inn et øktnavn i Øktnavn feltet. Bruk beskrivende navn som angir overvåkingsformålet.
- Valgfritt valgfritt Start hendelsesøkten ved serveroppstart for å aktivere automatisk øktaktivering.
- Standard øktmalen er BlankDu kan bruke andre maler hvis du bruker en forhåndsdefinert konfigurasjon.
4.3.2 Oppsett av hendelsesside
Ocuco Aktiviteter siden lar deg velge hvilke hendelser som skal overvåkes:
- Velg Aktiviteter siden fra venstre Velg en side panel.
- på Arrangementsbibliotek, bla gjennom tilgjengelige arrangementer eller bruk søkefunksjonen.
- Filtrer hendelser ved å skrive inn nøkkelord som «sql_statement_completed» for å finne relevante hendelser.
- Velg ønsket hendelse, for eksempel sql_statement_completed.
- Klikk på høyre pilknapp for å flytte hendelsen til Utvalgte hendelser liste.
4.3.3 Konfigurasjon av datalagring
Ocuco Datalagring siden definerer hvor hendelsesdata lagres:
- Velg Datalagring siden fra venstre Velg en side panel.
- på Targets område, velg en måltype fra rullegardinmenyen.
(1) hendelsesfil Mål
Målet event_file lagrer data i diskfiler med filtypen .xel:
- Velg hendelsesfil fra rullegardinmenyen for måltype.
- Angi filbanen, for eksempel C:\temp\YourSession_Target.xel.
- Konfigurer rollover-alternativer for å administrere diskplass ved å angi maksimal filstørrelse og antall filer.
- Målet skriver hendelser kontinuerlig til økten stopper eller lagringsgrensene er nådd.
(2) ringbuffer Mål
Målet ring_buffer lagrer hendelser i minnet for rask tilgang uten disk-I/O:
- Velg ringbuffer som måltype.
- Konfigurer maksimal minneallokering for bufferen.
- Forstå at eldre hendelser forkastes når bufferen fylles, noe som gjør dette egnet for overvåking av nylig aktivitet.
(3) hendelsesteller Mål
Målet event_counter teller ganske enkelt hendelsesforekomster uten å lagre detaljerte data. Dette gir minimal overhead når du bare trenger frekvensinformasjon.
(4) histogrammål
Histogrammet grupperer hendelser etter en spesifisert feltverdi, og oppretter dermed fordelingsstatistikk. Dette er nyttig for å identifisere vanlige mønstre eller høyfrekvente verdier.
(5) par_matching Mål
Målet pair_matching korrelerer relaterte hendelser som låseopptak og -utløsning. Dette muliggjør analyse av parede operasjoner og deres tidsmessige forhold.
4.3.4 Avanserte innstillinger
Ocuco Avansert siden gir konfigurasjonsalternativer på øktnivå:
- Velg Avansert siden fra venstre Velg en side panel.
- Konfigurer Modus for oppbevaring av hendelser å kontrollere hvordan hendelser håndteres under minnepress.
- Sett Maksimal forsendelsesforsinkelse å balansere sanntidsprosessering med systemytelse.
- Konfigurer Maksimal minnestørrelse og Maksimal hendelsesstørrelse basert på dine overvåkingsbehov.
- Velg Minnepartisjonsmodus for å optimalisere for miljøer med én eller flere CPUer.
4.4 Konfigurering av hendelsesfiltre (predikater)
Predikater reduserer datavolumet ved å filtrere hendelser basert på spesifikke kriterier. Slik konfigurerer du filtre:
- På Aktiviteter Velg hendelsen du vil filtrere, for eksempel «sql_statement_completed», på siden.
- Klikk Konfigurer for å åpne dialogboksen for hendelseskonfigurasjon.
- Velg Filter (predikat) fanen.
- på Felt I rullegardinmenyen velger du feltet du vil filtrere etter, for eksempel varighet.
- Velg en operatør, slik som «>».
- Gå inn i filteret Verdi, for eksempel 1000000 (1 sekund).
- Legg til flere betingelser om nødvendig.
4.5 Velge handlinger og hendelsesfelt
For hver hendelse kan du velge dataene som skal samles inn:
- På Aktiviteter Velg hendelsen du vil velge dataene for på siden, for eksempel «sql_statement_completed».
- Klikk Konfigurer for å åpne dialogboksen for hendelseskonfigurasjon.
- Velg Globale felt (handlinger) fanen.
- Velg handlinger for å legge til tilleggsinformasjon, for eksempel database_name eller client_app_name.
- Gjennomgå Hendelsesfelt seksjonen for å se hvilke felt som registreres automatisk.
- Fjern eventuelle unødvendige felt for å redusere datamengden.
4.6 Starte og administrere økter
Etter at du har konfigurert økten, kan du starte den og overvåke driften:
- Klikk OK for å opprette økten.
- I Objektutforsker, utvid Økter mappen for å se den nye økten.
- Høyreklikk på øktnavnet og velg Start økten for å begynne å fange opp hendelser.
- For å se livedata, høyreklikk på økten og velg Se livedata.
- Stopp økten ved å høyreklikke og velge Stopp økten.
5. Opprette utvidede hendelsesøkter ved hjelp av T-SQL
5.1 Syntaks for OPPRETT HENDELSESØKT
Å opprette utvidede hendelsesøkter med T-SQL gir presis kontroll og muliggjør skripting for automatisert distribusjon. CREATE EVENT SESSION-setningen følger en spesifikk syntaksstruktur.
Den grunnleggende syntaksen inkluderer sesjonsnavnet, ADD EVENT-klausuler for hver hendelse, ADD TARGET-klausuler for lagringsdestinasjoner og valgfrie WITH-klausuler for sesjonskonfigurasjon.
5.2 Opprette en grunnleggende hendelsesøkt
En grunnleggende økt overvåker spesifikke hendelser og skriver resultater til et mål. Slik konstruerer du de viktigste komponentene.
5.2.1 Definere øktnavn og alternativer
Start med å opprette økten med et beskrivende navn:
CREATE EVENT SESSION [SampleSession] ON SERVER
ON SERVER-klausulen oppretter en serveromfattet økt som vedvarer på tvers av databaseendringer. For Azure SQL Database bruker du ON DATABASE for databaseomfattede økter.
5.2.2 Legge til hendelser med LEGG TIL HENDELSE
Legg til hendelser som skal registreres ved hjelp av ADD EVENT-klausulen:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Dette registrerer alle fullførte SQL-setninger. Du kan legge til flere hendelser ved å inkludere ekstra ADD EVENT-klausuler.
5.2.3 Konfigurering av hendelseshandlinger
Handlinger samler inn ytterligere kontekst for hver hendelse. Legg til handlinger i parentes etter hendelsesnavnet:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Dette eksemplet registrerer SQL-teksten, databasenavnet og brukernavnet for hver fullførte setning.
5.2.4 Angi hendelsespredikater (WHERE-klausul)
Prediserer filterhendelser for å redusere datavolum. Bruk WHERE-klausulen i hendelsesdefinisjonen:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Dette filtrerer etter setninger med varighet på over 5 sekunder (5 000 000 mikrosekunder).
5.3 Legge til hendelsesmål
Mål definerer hvor hendelsesdata lagres og hvordan de behandles.
5.3.1 Syntaks for LEGG TIL MÅL
Legg til mål ved hjelp av ADD TARGET-klausulen etter at alle hendelser er definert:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Prefikset package0 indikerer at målet kommer fra basispakken.
5.3.2 Konfigurering av målparametere
Hver måltype godtar spesifikke parametere. For event_file, konfigurer filename, max_file_size og max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Denne konfigurasjonen oppretter filer på opptil 50 MB hver, og vedlikeholder opptil 5 filer gjennom rollover.
5.4 Øktalternativer og -innstillinger
WITH-klausulen konfigurerer alternativer på sesjonsnivå som kontrollerer atferd og ressursbruk.
5.4.1 MAX_MEMORY og EVENT_RETENTION_MODE
Kontroller minneallokering og hendelseshåndtering under press:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
EVENT_RETENTION_MODE-alternativene inkluderer ALLOW_SINGLE_EVENT_LOSS for minimal minnebruk, ALLOW_MULTIPLE_EVENT_LOSS for moderat overhead og NO_EVENT_LOSS for fullstendig dataoppbevaring på bekostning av potensiell ytelsespåvirkning.
5.4.2 MAX_DISPATCH_LATENCY
Angi maksimal tid hendelser kan forbli i buffere før de skrives til mål:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Lavere verdier gir mer sanntidsdata på bekostning av økte I/O-operasjoner.
5.4.3 MINNEPARTISJONSMODUS
Optimaliser minnepartisjonering for maskinvarekonfigurasjonen din:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Alternativene inkluderer NONE for enkeltpartisjon, PER_NODE for NUMA-systemer og PER_CPU for maksimal samtidighet på systemer med flere CPUer.
5.5 Starte, stoppe og endre økter
Administrer øktstatus og konfigurasjon gjennom ALTER EVENT SESSION-setninger.
5.5.1 ENDRE HENDELSESØKT for start/stopp
Start en økt etter opprettelse:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Stopp en løpende økt:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Endre eksisterende økter
Endre øktkonfigurasjonen mens den er stoppet. Legg til hendelser:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Fjern hendelser:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Slette hendelsesøkter
Fjern en økt fullstendig med DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Økten må stoppes før den avsluttes.
6. Arbeide med hendelsesmål i detalj
6.1 event_file Målkonfigurasjon
Målet event_file gir permanent lagring for hendelsesdata med fleksible konfigurasjonsalternativer.
6.1.1 Filsti og navnekonvensjoner
Angi fullstendig sti og filnavn for hendelsesfiler:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Bruk .xel-utvidelsen for utvidede hendelsesloggfiler. Sørg for at SQL Server Tjenestekontoen har skrivetillatelser til den angitte mappen.
6.1.2 Filoverflytting og størrelseshåndtering
Konfigurer automatisk filoverflytting for å administrere diskplass:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Når en fil når 50 MB, SQL Server Utvidede hendelser oppretter en ny fil med et økende suffiks. Etter at det er nådd 10 filer, overskrives den eldste filen.
6.1.3 Lese hendelsesfildata
Spør etter hendelsesfildata ved hjelp av funksjonen 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
);
Jokertegnmønsteret leser alle filer som er tilknyttet økten.
6.2 ring_buffer Målbruk
ring_buffer-målet lagrer hendelser i minnet for rask tilgang til nylig aktivitet.
6.2.1 Minnebasert hendelseslagring
Konfigurer ring_buffer for minnebasert lagring:
ADD TARGET package0.ring_buffer
Hendelser er bare tilgjengelige mens økten er aktiv, og SQL Server kjører. Data går tapt når økten stopper eller serveren starter på nytt.
6.2.2 Bufferstørrelse og konfigurasjon
Kontroller minneallokering for ringbufferen:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Angi minne i KB. Når bufferen fylles, forkastes eldre hendelser ved hjelp av en FIFO-metode.
6.2.3 Spørre ringbufferdata
Få tilgang til ringbufferdata via DMV-er:
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 inneholder XML-formatert hendelsesinformasjon.
6.3 hendelsesteller Mål
Målet event_counter gir enkel telling uten detaljert datalagring:
ADD TARGET package0.event_counter
Dette målet sporer hendelsesfrekvens med minimal overhead, noe som er nyttig for overvåking av store mengder der bare antall teller.
6.4 histogram Mål
Histogrammet grupperer hendelser etter feltverdier:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Denne konfigurasjonen oppretter et histogram som viser fordelingen av hendelser på tvers av databaser.
6.5 par_matching Mål
Målet pair_matching korrelerer relaterte hendelser som låseanskaffelser med utgivelser:
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'
)
Dette muliggjør analyse av parede operasjoner og deres varighet.
7. Vise og analysere utvidede hendelsesdata
7.1 Bruk av SSMS til å vise sanntidsdata
SQL Server Management Studio tilbyr et grafisk grensesnitt for visning av Extended Events-data i sanntid:
- I Objektutforsker, utvid Administrasjon -> Utvidede arrangementer -> Økter.
- Høyreklikk på den aktive økten.
- Velg Se livedata for å åpne visningsprogrammet for sanntidsdata.
- Hendelser vises i rutenettet etter hvert som de inntreffer.
- Klikk på individuelle hendelser for å se detaljerte feltverdier i detaljruten.
- Bruk filtrene på verktøylinjen for å fokusere på bestemte hendelsestyper eller feltverdier.
7.2 Spørre hendelsesfildata med T-SQL
T-SQL-spørringer gir fleksibel analyse av innsamlede hendelsesdata.
7.2.1 sys.fn_xe_file_target_read_file Funksjon
Les hendelsesfildata ved hjelp av denne systemfunksjonen:
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
);
Funksjonen returnerer én rad per hendelse med XML-formaterte detaljer.
7.2.2 Parsing av XML-hendelsesdata
Trekk ut spesifikke verdier fra XML-hendelsesdataene:
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-uttrykk trekker ut individuelle feltverdier fra XML-strukturen.
7.2.3 Konvertering av hendelsesdata til tabeller
Opprett strukturerte resultatsett fra hendelsesdata:
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 Spørre ringbufferdata
Uttrekk data fra ring_buffer-mål:
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 Systemvisninger for utvidede hendelser
SQL Server tilbyr flere DMV-er og katalogvisninger for administrasjon og overvåking av utvidede hendelsesøkter.
7.4.1 sys.server_event_sessions
Vis øktdefinisjoner lagret på serveren:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Denne katalogvisningen viser konfigurasjonsdetaljer for alle definerte økter.
7.4.2 sys.dm_xe_sessions
Se aktive økter:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Denne DMV-en gir kjøretidsinformasjon om aktive utvidede hendelsesøkter.
7.4.3 sys.dm_xe_session_targets
Vis mål knyttet til aktive økter:
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 Andre nyttige DMV-er
Ytterligere visninger gir omfattende informasjon om økten:
- sys.dm_xe_session_events: Viser hendelser i aktive økter
- sys.dm_xe_session_event_actions: Viser handlinger konfigurert for økthendelser
- sys.dm_xe_objects: Katalogiserer alle tilgjengelige hendelser, handlinger og mål
- sys.dm_xe_object_columns: Detaljfelt tilgjengelig for hver hendelsestype
- sys.dm_xe_packages: Viser alle utvidede hendelsespakker
8. Praktiske brukstilfeller og eksempler
8.1 Overvåking av utførelse av SQL-setninger
Sporing av utførelse av SQL-setninger gir innsikt i spørremønstre og ytelsesegenskaper.
8.1.1 Sporing av sql_statement_completed-hendelser
Opprett en økt for å overvåke fullførte SQL-setninger:
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 Filtrering etter database eller applikasjon
Fokuser på spesifikke databaser eller applikasjoner ved hjelp av predikater:
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 Innhenting av informasjon om fastlåste situasjoner
Analyse av fastlåste områder krever at man samler inn detaljert informasjon om motstridende transaksjoner.
8.2.1 xml_deadlock_report Hendelse
Opprett en økt for å fange opp fullstendige vranglåsgrafer:
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 Analysere vranglåsgrafer
Hent ut og analyser informasjon om fastlåste situasjoner:
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';
Vrangstillingsgrafen inneholder detaljer om prosesser, ressurser og valg av offer.
8.3 Ytelsesproblemer med sporingsspørringer
Identifiser dårlig ytende spørringer ved hjelp av varighets- og ressursforbruksmålinger.
8.3.1 Deteksjon av langvarige spørringer
Registrer spørringer som overskrider bestemte varighetsgrenser:
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 Analyse av utførelsesplan
Registrering av spørreplaner for ytelsesanalyse:
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 Overvåking av pålogging og sikkerhetshendelser
Spor autentiserings- og autorisasjonsaktiviteter for sikkerhetsrevisjon.
8.4.1 Sporing av suksess og mislykkede pålogginger
Overvåk både vellykkede og mislykkede påloggingsforsøk:
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 Endringer i tillatelser
Endringer i sporsikkerhetstillatelser:
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 Overvåking på databasenivå
Overvåk databasespesifikke operasjoner og tilstandsendringer.
8.5.1 Sikkerhetskopierings- og gjenopprettingshendelser
Spor sikkerhetskopiering og gjenopprettingsoperasjoner:
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 Endringer i databasetilstand
Overvåk databasetilstandsoverganger:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Oppdage databasekorrupsjon og integritetsproblemer
SQL Server Utvidede hendelser gir tidlig varsling for å oppdage potensiell databasekorrupsjon, noe som muliggjør proaktiv inngripen før problemer eskalerer.
8.6.1 Viktige hendelser for korrupsjonsdeteksjon
Flere hendelser signaliserer potensiell korrupsjon eller I/O-problemer.
8.6.1.1 error_reported Hendelse for kritiske feil
Hendelsen error_reported fanger opp alle SQL Server feil, inkludert korrupsjonsrelaterte feilnumre:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Feil 823 indikerer I/O-feil, 824 signaliserer logiske konsistensfeil, og 825 rapporterer vellykkede leseforsøk som kan indikere maskinvareproblemer.
8.6.1.2 database_suspect_data_page Hendelse
Denne hendelsen utløses når SQL Server møter en mistenkelig side:
ADD EVENT sqlserver.database_suspect_data_page
Mistenkelige sider indikerer potensiell korrupsjon og registreres i tabellen msdb.dbo.suspect_pages.
8.6.1.3 errorlog_written Hendelse
Registrer oppføringer skrevet til SQL Server feillogg:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Opprette en korrupsjonsovervåkingsøkt
Etabler en omfattende samling for korrupsjonsdeteksjon og -overvåking.
8.6.2.1 Filtrering etter korrupsjonsfeilnumre (823, 824, 825)
Lag en målrettet økt med fokus på korrupsjonsindikatorer:
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 Angi passende alvorlighetsnivåer
Inkluder feil med høy alvorlighetsgrad som kan tyde på korrupsjon:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Alvorlighetsgrad 20 og over indikerer problemer på systemnivå som ofte er relatert til korrupsjon.
8.6.2.3 Konfigurere hendelsesfilmål for varsler
Lagre korrupsjonshendelser for analyse og varsling:
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 Analysere data om korrupsjonshendelser
Uttrekk og tolk korrupsjonsrelaterte hendelser fra innsamlede data.
8.6.3.1 Identifisering av mistenkelige sider
Spørsmål etter database_suspect_data_page-hendelser:
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 Uttrekk av feildetaljer og kontekst
Analyser error_reported-hendelser for korrupsjonsmønstre:
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 Integrasjon med DBCC CHECKDB
Bruk data om utvidede hendelser som veiledning DBCC CHECKDB henrettelse.
8.6.4.1 Utløsing av DBCC CHECKDB basert på hendelser
Når det oppdages korrupsjonshendelser, kjør DBCC CHECKDB for omfattende validering:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Utvidede hendelser gir tidlig advarsel, mens DBCC CHECKDB utfører grundig validering.
8.6.4.2 Automatiserte arbeidsflyter for korrupsjonsrespons
Implementer automatiserte svar ved å overvåke hendelsesfilen:
- Konfigurer SQL Server Agentjobb for å regelmessig spørre i hendelsesfilen for korrupsjonsovervåking.
- Når det oppdages korrupsjonshendelser, kjør DBCC CHECKDB på den berørte databasen.
- Send e-postvarsler til databaseadministratorer med hendelsesdetaljer og DBCC CHECKDB-resultater.
- Logg funn til en sentralisert overvåkingstabell for trendanalyse.
8.6.4.3 Balanse mellom proaktiv overvåking og ytelse
Utvidede hendelser tilbyr korrupsjonsdeteksjon med lav overhead sammenlignet med hyppig DBCC CHECKDB-kjøring:
- Kjør utvidede hendelser kontinuerlig for å oppdage korrupsjon i sanntid
- Kjør DBCC CHECKDB bare når det vises indikatorer for korrupsjon
- Planlegg regelmessig DBCC CHECKDB i vedlikeholdsvinduer
- Bruk utvidede hendelser til å identifisere hvilke databaser som krever umiddelbar oppmerksomhet
Denne tilnærmingen gir proaktiv overvåking uten det betydelige ressursforbruket som konstante integritetskontroller medfører.
8.6.4.4 Reparer ødelagt database
Hvis det oppdages feil i databasen, kan du bruke DBCC CHECKDB til å fikse mindre feil. Hvis det mislykkes, kan du prøve en tredjeparts programvare. SQL-databasegjenopprettingsverktøy, som generelt gir en høyere gjenopprettingsrate på alvorlig korrupte databaser.
9. Server-scoped vs. database-scoped utvidede hendelser
9.1 Server-scoped hendelsesøkter
Serveromfattede økter overvåker aktivitet på tvers av hele SQL Server forekomst. Disse øktene opprettes med ON SERVER-klausulen og lagres i hoveddatabasen.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Serveromfattende økter fanger opp hendelser fra alle databaser og er egnet for overvåking på instansnivå.
9.2 Databaseomfattende hendelsesøkter (Azure SQL Database)
Databasebegrensede økter er begrenset til én enkelt database og brukes primært i Azure SQL Database der tilgang på servernivå er begrenset:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
I Azure SQL Database lagres hendelsesfiler i Azure Blob Storage i stedet for lokale filsystemer.
9.3 Forskjeller og brukstilfeller
Serveromfattende økter gir omfattende overvåking på tvers av alle databaser, men krever utvidede tillatelser. Databaseomfattende økter tilbyr isolasjon og er passende når man overvåker bestemte applikasjoner eller leietakere.
Bruk serveromfattede økter for sentralisert overvåking, feilsøking av ytelse på tvers av databaser og sikkerhetsrevisjon. Bruk databaseomfattede økter i Azure SQL Database, miljøer med flere leietakere eller når du delegerer overvåkingsansvar til applikasjonsteam.
10. Utvidede hendelser i Azure SQL Database
10.1 Azure-spesifikke hensyn
Azure SQL Database implementerer utvidede hendelser med noen forskjeller fra lokale systemer SQL ServerØkter er databasebegrenset som standard, og lagring av hendelsesfiler bruker Azure Blob Storage i stedet for lokale filsystemer.
Autentisering til Azure Blob Storage krever et SAS-token konfigurert i hendelsesfilmålet. Tilkoblingsstrenger refererer til lagringskontoen og beholderen der hendelsesfilene er lagret.
10.2 Tilgjengelige mål i Azure
Azure SQL Database støtter disse utvidede hendelsesmålene:
- event_file: Skriver til Azure Blob Storage
- ring_buffer: Minnebasert lagring med samme oppførsel som lokalt
- event_counter: Teller hendelsesforekomster
Målet event_file krever konfigurasjon med Azure Blob Storage-legitimasjon:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Opprette databasebegrensede økter
Opprett en økt i Azure SQL Database:
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;
Databasebegrensede økter i Azure oppfører seg på samme måte som serverbegrensede økter lokalt, men med omfang begrenset til den gjeldende databasen.
11. Beste praksis og ytelsesoptimalisering
11.1 Minimering av ytelsespåvirkning
Utvidede hendelser er utformet for minimal overhead, men feil konfigurasjon kan påvirke ytelsen. Følg disse retningslinjene:
- Bruk spesifikke predikater for å filtrere hendelser i stedet for å fange opp alt
- Unngå å samle unødvendige handlinger som øker behandlingskostnadene
- Velg passende mål basert på behov for datalagring
- Angi rimelige bufferstørrelser og forsendelsesforsinkelser
- Overvåk ressursforbruket for økter ved hjelp av DMV-er
11.2 Valg av riktige hendelser og filtre
Velg hendelser som er direkte rettet mot overvåkingsmålene dine. Unngå hendelser med høy frekvens med mindre det er nødvendig, og bruk alltid predikater for å redusere datavolumet.
For eksempel, i stedet for å fange opp alle sql_statement_completed-hendelser, filtrer etter spesifikke databaser eller varighetsterskler:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Retningslinjer for valg av mål
Velg mål basert på dine analysekrav:
- Bruk event_file for detaljert historisk analyse og langsiktig oppbevaring
- Bruk ring_buffer for sanntidsovervåking med minimal I/O-påvirkning
- Bruk event_counter når bare frekvens teller
- Bruk histogram for fordelingsanalyse
- Bruk pair_matching for korrelert hendelsesanalyse
11.4 Anbefalinger for øktkonfigurasjon
Konfigurer økter med passende ressursgrenser:
- Angi MAX_MEMORY basert på forventet hendelsesvolum og serverressurser
- Bruk ALLOW_SINGLE_EVENT_LOSS for minimal overhead i de fleste scenarier
- Sett MAX_DISPATCH_LATENCY for å balansere sanntidsbehov med ytelse
- Bruk PER_CPU minnepartisjonering på flerprosessorsystemer
- Unngå STARTUP_STATE=ON med mindre kontinuerlig overvåking er nødvendig
11.5 Administrere størrelse og oppbevaring av hendelsesfiler
Konfigurer filoverflytting for å forhindre ubegrenset diskbruk:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Denne konfigurasjonen lagrer omtrent 1 GB med hendelsesdata (10 filer × 100 MB). Juster basert på oppbevaringskravene dine og tilgjengelig lagringsplass.
12. Feilsøking av utvidede hendelser
12.1 Vanlige problemer og løsninger
Vanlige problemer med utvidede hendelser inkluderer økter som ikke registrerer data, ytelsesforringelse, problemer med filmål og uventet øktoppførsel.
12.2 Økten registrerer ikke data
Hvis en økt ikke registrerer forventede hendelser:
- Bekreft at økten er startet ved hjelp av sys.dm_xe_sessions.
- Sjekk predikater for å sikre at de ikke filtrerer ut alle hendelser.
- Bekreft at hendelser utløses ved å midlertidig fjerne filtre.
- Gjennomgå tillatelsene for å sikre at du har tilgang til å se øktdata.
- Sjekk at målkonfigurasjonen er riktig og skrivbar.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Ytelsesdegradering
Hvis utvidede hendelser forårsaker ytelsesproblemer:
- Legg til predikater for å redusere hendelsesvolumet.
- Fjern unødvendige handlinger som samler inn tilleggsdata.
- Øk MAX_DISPATCH_LATENCY for å redusere skrivefrekvensen.
- Endre EVENT_RETENTION_MODE til ALLOW_SINGLE_EVENT_LOSS.
- Vurder å bruke ring_buffer i stedet for event_file for hendelser med høy frekvens.
12.4 Problemer med filmål
Problemer med filmål er ofte knyttet til tillatelser eller diskplass:
- Bekreft SQL Server Tjenestekontoen har skrivetillatelser til målkatalogen.
- Sørg for at det er tilstrekkelig diskplass tilgjengelig.
- Sjekk at den angitte banen finnes og er tilgjengelig.
- Gjennomgå konfigurasjonen for filoverflytting hvis filer ikke ruller over som forventet.
12.5 Feilsøking med systemvisninger
Bruk DMV-er til å diagnostisere problemer med utvidede hendelser:
-- 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. Avanserte emner
13.1 Opprette tilpassede arrangementspakker
Avanserte brukere kan opprette tilpassede hendelsespakker for å utvide SQL Server Utvidet hendelsesfunksjonalitet. Dette krever C++-utvikling og integrasjon med SQL Server utvidbarhetsrammeverk.
Tilpassede pakker muliggjør overvåking av applikasjonsspesifikke hendelser eller integrering av tredjeparts overvåkingssystemer med infrastruktur for utvidede hendelser.
13.2 Maler for arrangementsøkter
SSMS tilbyr innebygde maler for vanlige overvåkingsscenarier. Få tilgang til maler når du oppretter nye økter via veiviseren:
- I dialogboksen Ny økt klikker du på Mal nedtrekksmenyen.
- Velg blant tilgjengelige maler som Sporing av spørringsdetaljer eller Systemtilstand.
- Endre malen slik at den passer dine spesifikke behov.
13.3 Integrering med overvåkingsløsninger
Data om utvidede hendelser kan gi bedriftsovervåkingsløsninger:
- Eksporter hendelsesdata til sentraliserte loggføringssystemer
- Analysere hendelsesfiler og laste inn data i overvåkingsdatabaser
- Lag tilpassede dashbord med BI-verktøy
- Utløs varsler basert på spesifikke hendelsesmønstre
- Correlate SQL Server hendelser med applikasjons- og infrastrukturmålinger
13.4 Automatisering og planlegging
Automatiser administrasjon av utvidede hendelser ved hjelp av SQL Server Middel:
- Opprett jobber for å starte/stoppe økter i bestemte tidsvinduer
- Planlegg analyse og rapportering av hendelsesfiler
- Implementer retningslinjer for dataoppbevaring ved å arkivere eller slette gamle hendelsesfiler
- Automatiser respons på oppdagede tilstander som ytelsesproblemer eller sikkerhetshendelser
14. Migrasjon fra SQL Server Profiler
14.1 SQL Server Kartlegging av profilerhendelser til utvidede hendelser
Microsoft tilbyr kartlegging mellom SQL Server Profiler hendelser og utvidede hendelser. Vanlige tilordninger inkluderer:
- SQL:Batchfullført -> sql_batch_fullført
- SQL:BatchStarting -> sql_batch_starting
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- Vranglåsgraf -> xml_deadlock_report
- Revisjonsinnlogging -> logg inn
- Revisjon Logg ut -> logg ut
14.2 Konvertering av sporingsdefinisjoner
Konverter eksisterende SQL Server Profiler sporer til utvidede hendelsesøkter ved å identifisere tilsvarende hendelser og konfigurere passende predikater. SSMS gir hjelp til vanlige konverteringer.
Gå gjennom sporingsfiltre og konverter dem til predikater for utvidede hendelser. Handlinger i utvidede hendelser erstatter sporingskolonner fra SQL Server Profiler.
14.3 Ytelsessammenligning
Utvidede hendelser gir betydelig bedre ytelse enn SQL Server Profiler. Benchmark-studier viser at utvidede hendelser bruker færre CPU-sykluser og har mindre innvirkning på transaksjonsgjennomstrømningen.
Utvidede hendelser bruker asynkron prosessering og optimalisert minnehåndtering, mens SQL Server Profiler er avhengig av synkron hendelsesregistrering som blokkerer til sporingsbehandlingen er fullført.
15. konklusjon
15.1 Sammendrag av nøkkelbegreper
SQL Server Utvidede hendelser tilbyr et kraftig og lett rammeverk for overvåking og feilsøking SQL ServerArkitekturen består av hendelser, handlinger, predikater, mål og økter som samarbeider for å fange opp relevant serveraktivitet.
Økter kan opprettes ved hjelp av SSMS eller T-SQL, noe som gir fleksibilitet for både ad hoc-feilsøking og automatisert overvåking. Flere måltyper støtter ulike analysemetoder, fra sanntidsovervåking med ring_buffer til historisk analyse med event_file.
Utvidede hendelser leverer overlegen ytelse sammenlignet med SQL Server Profiler samtidig som den tilbyr mer omfattende overvåkingsfunksjoner. Systemet lar databaseadministratorer og utviklere diagnostisere problemer, optimalisere ytelse, forbedre sikkerheten og opprettholde samsvar.
15.2 Neste steg og ytterligere ressurser
For å fortsette å utvikle din SQL Server XEvents ekspertise:
- Implementer utvidede hendelser i testmiljøer for å få praktisk erfaring
- Se gjennom Microsoft-dokumentasjonen for fullstendige hendelseskataloger og detaljert syntaksreferanse.
- Bli med SQL Server fellesskapsforum for å lære av andres erfaringer
- Utforsk avanserte scenarier som tilpassede pakker og integrasjon med overvåkingsplattformer
- Utvikle et bibliotek med øktmaler for vanlige overvåkingsscenarier
16 Vanlige spørsmål-seksjon
Q: Hva er SQL Server Utvidede arrangementer?
A: SQL Server Extended Events er et lettvekts system for ytelsesovervåking integrert i SQL Server Databasemotor som samler inn detaljert informasjon om serveroperasjoner med minimal overhead.
Spørsmål: Hvordan skiller utvidede hendelser seg fra SQL Server Profiler?
A: Utvidede hendelser gir bedre ytelse, lavere overhead og mer fleksibel konfigurasjon enn SQL Server Profiler. SQL Server Profiler er utdatert, og Microsoft anbefaler å bruke utvidede hendelser for alle overvåkingsoppgaver.
Spørsmål: Kan utvidede hendelser påvirke SQL Server opptreden?
A: Når utvidede hendelser er riktig konfigurert med passende predikater og ressursgrenser, har de minimal ytelsespåvirkning. Dårlig konfigurasjon uten filtrering kan påvirke ytelsen.
Q: Hvilke tillatelser kreves for å opprette utvidede hendelsesøkter?
A: Du trenger tillatelse til ALTER ANY EVENT SESSION for server-scoped sesjoner eller CONTROL-tillatelse på databasen for database-scoped sesjoner.
Spørsmål: Hvordan kan jeg se data om utvidede hendelser?
A: Bruk SQL Server Management Studios live-datavisningsprogram, spør hendelsesfiler med sys.fn_xe_file_target_read_file, eller spør ringbufferdata via DMV-er.
Spørsmål: Kan utvidede hendelser oppdage databasekorrupsjon?
A: Ja, utvidede hendelser kan fange opp korrupsjonsrelaterte feil (823, 824, 825) og mistenkelige sidehendelser, og gi tidlig varsling om potensielle korrupsjonsproblemer.
Spørsmål: Hva er forskjellen mellom hendelser, handlinger og predikater?
A: Hendelser er forekomster du vil overvåke. Handlinger legger til tilleggsinformasjon til registrerte hendelser. Prediserer filtrering av hendelser basert på betingelser for å redusere datavolum.
Spørsmål: Hvordan overvåker jeg spørringer fra bestemte applikasjoner eller databaser?
A: Bruk predikater i hendelseskonfigurasjonen din for å filtrere etter database_name, client_app_name eller andre relevante felt.
Q: Hvilke mål bør jeg bruke for utvidede hendelser?
A: Bruk event_file for vedvarende lagring og historisk analyse, ring_buffer for sanntidsovervåking med lav overhead, event_counter for enkel frekvenssporing og histogram for distribusjonsanalyse.
Spørsmål: Er utvidede hendelser tilgjengelige i Azure SQL Database?
A: Ja, Azure SQL Database støtter databasebegrensede utvidede hendelser med hendelsesfiler lagret i Azure Blob Storage.
Spørsmål: Hvordan feilsøker jeg en utvidet hendelsesøkt som ikke registrerer data?
A: Bekreft at økten er startet, sjekk at predikater ikke filtrerer alle hendelser, bekreft målkonfigurasjonen og gjennomgå tillatelser ved hjelp av system-DMV-er.
Spørsmål: Kan jeg automatisere administrasjon av utvidede hendelser?
A: Ja, bruk SQL Server Agentjobber for å starte/stoppe økter, analysere hendelsesfiler, implementere oppbevaringspolicyer og reagere på oppdagede tilstander.
Referanser
- Hurtigstart: Utvidede hendelser i SQL Server – Microsoft Lær
- Oversikt over utvidede hendelser – Microsoft Learn
- SQL Server Utvidede arrangementsøkter – Microsoft Learn
- Mål for utvidede arrangementer i SQL Server – Microsoft Lær
- SQL Server Utvidet hendelsesmotor – Microsoft Learn
- SQL Server Profiler: Komplett guide
- DBCC CHECKDB: Komplett guide
- DataNumen SQL Recovery
om forfatteren
Yuan Sheng er en senior databaseadministrator (DBA) med over 10 års erfaring innen SQL Server miljøer og administrasjon av bedriftsdatabaser. Han har løst hundrevis av databasegjenopprettingsscenarier på tvers av finansielle tjenester, helsevesen og produksjonsorganisasjoner.
Yuan spesialiserer seg på SQL Server gjenoppretting av database, løsninger med høy tilgjengelighetog ytelsesoptimalisering. Hans omfattende praktiske erfaring inkluderer administrasjon av databaser på flere terabyte, implementering av Alltid på tilgjengelighetsgrupper, og utvikling av automatiserte sikkerhetskopierings- og gjenopprettingsstrategier for forretningskritiske forretningssystemer.
Gjennom sin tekniske ekspertise og praktiske tilnærming fokuserer Yuan på å lage omfattende veiledninger som hjelper databaseadministratorer og IT-fagfolk med å løse komplekse SQL Server utfordringer effektivt. Han holder seg oppdatert på det siste SQL Server utgivelser og Microsofts utviklende databaseteknologier, og tester jevnlig gjenopprettingsscenarioer for å sikre at anbefalingene hans gjenspeiler beste praksis i den virkelige verden.
Har spørsmål vedr SQL Server gjenoppretting eller trenger du ytterligere veiledning for feilsøking av databaser? Yuan ønsker velkommen tilbakemeldinger og forslag for å forbedre disse tekniske ressursene.

















