1. Introduktion
1.1 Hvad er SQL Server Udvidede begivenheder?
SQL Server Extended Events er et letvægtssystem til overvågning af ydeevne, der gør det muligt for administratorer og udviklere at indsamle og analysere detaljerede data om serveraktivitet. Dette system er integreret i SQL Server Database Engine og giver omfattende indsigt i både normal drift og fejlfindingsscenarier.
1.2 Hvorfor bruge udvidede hændelser til overvågning?
SQL Server Udvidede begivenheder tilbyder adskillige overbevisende fordele ved databaseovervågning og fejlfinding:
- Minimal påvirkning af ydeevnen med letvægtsarkitektur
- Granulær kontrol over dataindsamling og hændelsesfiltrering
- Brugerdefinerbar dataindsamling skræddersyet til specifikke overvågningsbehov
- Mulighed for at registrere hændelser fra flere pakker samtidigt
- Fleksible filtreringsfunktioner til at fokusere på relevante operationer
- Understøttelse af overvågning af produktionssystemer uden at forringe brugeroplevelsen
- Omfattende sporing af præstationsmålinger
- Avanceret diagnostic-funktioner til fejlfinding
- Vedligeholdelse af revisionsspor for overholdelse af krav
- Muligheder for analyse af realtids- og historiske data
1.3 Udvidede begivenheder vs. SQL Server Profiler
Mens SQL Server Profiler har været et traditionelt overvågningsværktøj, men MS SQL Extended Events tilbyder et mere effektivt alternativ. Extended Events bruger færre systemressourcer og tilbyder bedre skalerbarhed til produktionsmiljøer.
SQL Server Profiler er nu udfaset, og Microsoft anbefaler at migrere til udvidede hændelser for alle overvågningsaktiviteter.
2. Forståelse af udvidet begivenhedsarkitektur
2.1 Komponenter i motoren for udvidede begivenheder
Extended Events-motoren består af flere kernekomponenter, der arbejder sammen om at indsamle, behandle og lagre hændelsesdata. Forståelse af disse komponenter hjælper dig med at designe effektive overvågningsløsninger.
- Afsender: Dispatcher-komponenten koordinerer hændelsesflowet fra hændelseskilder til Extended Events-motoren. Når en hændelse udløses, modtager dispatcheren notifikationen og sender den til aktive sessioner, der abonnerer på den specifikke hændelsestype.
- Buffer: Buffertemporargemmer i hukommelsen hændelsesdata, før der skrives til dem tarDenne buffermekanisme forbedrer ydeevnen ved at reducere I/O-operationer. Bufferstørrelse og administrationsindstillinger kan konfigureres for at afbalancere hukommelsesforbruget med datafangstkravene.
- Session: En session definerer omfanget af hændelsesovervågning. Den specificerer, hvilke hændelser der skal registreres, hvilke handlinger der skal udføres, hvilke prædikater der skal anvendes, og hvor resultaterne skal gemmes. Sessioner kan oprettes, ændres og ...tarted, og stoppede uafhængigt.
- Tarhent instans: Target-instanser repræsenterer lagringsdestinationerne for optagede hændelsesdata. Hver session kan skrive til en eller flere tarfår, såsom filer, ringbuffere eller tællere. Tarhenter processen og bevarer hændelsesoplysningerne til senere analyse.
2.2 Eventpakker
SQL Server Udvidede hændelser organiserer funktionalitet i pakker. Hver pakke indeholder relaterede hændelser, handlinger, typer, prædikater og tarfår. Almindelige pakker inkluderer sqlserver, sqlos og package0.
- SQLserver-pakken leverer databasespecifikke begivenheder som forespørgsler og transaktioner.
- Sqlos-pakken indeholder operativsystemhændelser.
- Package0 tilbyder generel funktionalitet, der bruges på tværs af alle pakker.
2.3 Hændelsestyper og felter
Begivenheder repræsenterer hændelser inden for SQL Server som du vil overvåge. Hver hændelsestype har foruddefinerede felter, der indsamler relevante oplysninger. For eksempel inkluderer hændelsen sql_statement_completed felter for varighed, CPU-tid, læsninger og skrivninger.
Hændelser kan være synkrone eller asynkrone. Synkrone hændelser udløses under selve operationen, mens asynkrone hændelser udløses efter afslutning. Forståelse af hændelsernes karakteristika hjælper dig med at vælge passende hændelser til dine overvågningsbehov.
2.4 handlinger
Handlinger tilføjer supplementertary-oplysninger til registrerede hændelser. Når en hændelse udløses, udføres tilknyttede handlinger for at indsamle yderligere kontekst, såsom SQL-tekst, sessions-ID eller oplysninger om kaldstak.
Almindelige handlinger inkluderer sql_text til at registrere forespørgselssætninger, database_name til at identificere databasen og client_hostnavn for at spore den oprindelige server. Handlinger giver vigtig kontekst til fejlfinding og analyse.
2.5 Tarfår
Tarbestemmer, hvordan og hvor hændelsesdata gemmes. SQL Server Udvidede begivenheder understøtter flere target-typer, herunder:
- event_file til disklagring, der giver permanent lagring til detaljeret analyse
- ring_buffer til hukommelsesbaseret opbevaring, der giver hurtig adgang til de seneste begivenheder med minimal overhead
- event_counter til simpel optælling
- histogram til gruppering
- pair_matching til korrelation af relaterede begivenheder
2.6 Prædikater (filtre)
Prædikerer filtrering af hændelser baseret på specificerede betingelser, hvilket reducerer mængden af indfangede data. Du kan filtrere efter databasenavn, programnavn, sessions-ID, varighedstærskler eller enhver værdi i hændelsesfeltet.
Effektiv brug af prædikater minimerer påvirkningen af ydeevnen ved kun at registrere relevante hændelser. Komplekse prædikater kombinerer flere betingelser ved hjælp af logiske operatorer for at oprette præcise filtreringskriterier.
3. Udvidede begivenhedssessionstilstande og livscyklus
3.1 Sessionstilstande: OPRET, ÆNDRE og SLIP
Udvidede begivenhedssessioner forløber gennem forskellige tilstande:
- CREATE EVENT SESSION-sætningen definerer en ny session, men den gør ikke det.tarSessionen er stoppet, indtil den eksplicit aktiveres.
- ALTER EVENT SESSION-sætningen ændrer sessionskonfigurationen eller ændrer dens tilstand mellem stoppet og started.
- DROP EVENT SESSION-sætningen fjerner sessionsdefinitionen helt fra serveren.
3.2 Sessionens indhold og karakteristika
Hver session indeholder en samling af begivenheder, handlinger, targets og prædikater. Sessioner har implicitte grænser, der definerer deres omfang og funktionsmåde. Konfigurationsindstillinger styrer hukommelsesallokering, hændelsestilbageholdelse og afsendelseslatens.
Sessionskarakteristika omfatter, om de fortsætter på tværs af serverressourcertarts, maksimal hukommelsesallokering og hvordan de håndterer hukommelsestryk. Disse indstillinger påvirker sessionsadfærd og ressourceforbrug betydeligt.
3.3 Sessionsgrænser og pakker
Sessionsgrænser definerer relationer mellem begivenheder, targets og pakker. Hændelser fra én pakke kan udløse handlinger fra en anden pakke, hvilket giver fleksibilitet i dataindsamlingsstrategier.
Pakkerelationer giver dig mulighed for at kombinere hændelser fra flere kilder i en enkelt session. Denne funktion muliggør omfattende overvågningsscenarier, der spænder over forskellige SQL Server delsystemer.
4. Oprettelse af udvidede begivenhedssessioner ved hjælp af SSMS
4.1 Forudsætninger og opsætning
Før du opretter SQL Server For udvidede begivenhedssessioner, sørg for at du har de nødvendige tilladelser. Du skal bruge tilladelsen ALTER ANY EVENT SESSION for server-scoped sessioner eller CONTROL-tilladelsen på databasen for database-scoped sessioner.
Bekræft det SQL Server Management Studio er installeret og forbundet til din tarfå et eksempel. Gør dig bekendt med overvågningskravene, og identificer hvilke hændelser og tarpasser bedst til dine behov.
4.2 Adgang til udvidede begivenheder i Object Explorer
Følg disse trin for at få adgang til brugergrænsefladen Udvidede hændelser i SSMS:
- Åbne SQL Server Management Studio og opret forbindelse til din SQL Server instans.
- I Objekt Explorer skal du udvide Management -> Udvidede arrangementer.
- Noden Udvidede begivenheder indeholder Sessions og Pakker mapper til administration af dine overvågningskonfigurationer.
4.3 Opret en ny session
Sådan opretter du en ny session:
-
- Højreklik på Sessions mappe under Udvidede arrangementer.
- Type Ny session for at åbne konfigurationsdialogen. Følgende indhold vil bruge denne metode til at oprette en ny session.
Bemærk: Ny sessionsguide er også tilgængelig for en mere guidet oplevelse.
4.3.1 Generel sidekonfiguration
På Generelt side, konfigurer grundlæggende sessionsegenskaber:
- Indtast et sessionsnavn i Sessionsnavn felt. Brug beskrivende navne, der angiver overvågningsformålet.
- Vælg eventuelt Start begivenhedssessionen på serveren starrør for at aktivere automatisk sessionsaktivering.
- Standardsessionsskabelonen er BlankDu kan bruge andre skabeloner, hvis du bruger en foruddefineret konfiguration.
4.3.2 Opsætning af begivenhedsside
Events siden giver dig mulighed for at vælge, hvilke hændelser der skal overvåges:
- Vælg Events side fra venstre Vælg en side panel.
- I Begivenhedsbibliotekrary, gennemse tilgængelige begivenheder eller brug søgefunktionen.
- Filtrer hændelser ved at skrive nøgleord som "sql_statement_completed" for at finde relevante hændelser.
- Vælg den ønskede hændelse, f.eks. sql_statement_completed.
- Klik på den højre pileknap for at flytte begivenheden til Udvalgte begivenheder liste.
4.3.3 Konfiguration af datalagring
Datalagring Siden definerer, hvor hændelsesdata gemmes:
- Vælg Datalagring side fra venstre Vælg en side panel.
- I Tarfår område, vælg et tarHent typen fra rullemenuen.
(1) event_fil Tarfå
Event_filen tarHent lagrede data til diskfiler med filtypen .xel:
- Type event_fil fra tarHent type-rullemenuen.
- Angiv filstien, f.eks. C:\temp\YourSession_Target.xel.
- Konfigurer rollover-indstillinger for at administrere diskplads ved at indstille maksimal filstørrelse og filantal.
- tarHent skrivehændelser kontinuerligt, indtil sessionen stopper, eller lagergrænserne er nået.
(2) ringbuffer Tarfå
Ringbufferen tarHent gemme begivenheder i hukommelsen for hurtig adgang uden disk I/O:
- Type ringbuffer som tarfå typen.
- Konfigurer den maksimale hukommelsesallokering for bufferen.
- Forstå, at ældre hændelser kasseres, når bufferen fyldes, hvilket gør dette egnet til overvågning af nylig aktivitet.
(3) event_tæller Tarfå
Event_counter-funktionen target tæller simpelthen hændelsesforekomster uden at gemme detaljerede data. Dette giver minimal overhead, når du kun har brug for frekvensinformation.
(4) histogram Tarfå
Histogrammet tarHent grupper af hændelser efter en bestemt feltværdi og opret fordelingsstatistik. Dette er nyttigt til at identificere almindelige mønstre eller højfrekvente værdier.
(5) par_matching Tarfå
Par_matchningen tarHent korrelater af relaterede begivenheder såsom låseaktivering og -frigivelse. Dette muliggør analyse af parrede operationer og deres tidsmæssige relationer.
4.3.4 Avancerede indstillinger
Avanceret Siden indeholder konfigurationsmuligheder på sessionsniveau:
- Vælg Avanceret side fra venstre Vælg en side panel.
- Konfigurer Hændelseslagringstilstand at kontrollere, hvordan begivenheder håndteres under hukommelsespres.
- sæt Maksimal forsendelsesforsinkelse at balancere realtidsbehandling med systemets ydeevne.
- Konfigurer Maksimal hukommelsesstørrelse og Maksimal begivenhedsstørrelse baseret på dine overvågningsbehov.
- Type Hukommelsespartitioneringstilstand for at optimere til miljøer med én eller flere CPU'er.
4.4 Konfiguration af hændelsesfiltre (prædikater)
Prædikater reducerer datamængden ved at filtrere hændelser baseret på specifikke kriterier. Sådan konfigurerer du filtre:
- På Events skal du vælge den hændelse, du vil filtrere, f.eks. “sql_statement_completed”.
- Klik Konfigurer for at åbne dialogboksen for begivenhedskonfiguration.
- Vælg Filter (prædikat) fane.
- I Felt I rullemenuen skal du vælge det felt, der skal filtreres efter, f.eks. varighed.
- Vælg en Operatør, såsom “>”.
- Indtast filteret Værdi, såsom 1000000 (1 sekund).
- Tilføj flere betingelser om nødvendigt.
4.5 Valg af handlinger og hændelsesfelter
For hver begivenhed kan du vælge de data, der skal indsamles:
- På Events På siden skal du vælge den hændelse, du vil vælge dataene for, f.eks. “sql_statement_completed”.
- Klik Konfigurer for at åbne dialogboksen for begivenhedskonfiguration.
- Vælg Globale felter (handlinger) fane.
- Vælg handlinger for at tilføje tillægtary-oplysninger, f.eks. databasenavn eller klient_app-navn.
- Gennemgå Hændelsesfelter sektion for at se, hvilke felter der automatisk registreres.
- Ryd alle unødvendige felter for at reducere datamængden.
4.6 StarOprettelse og administration af sessioner
Når du har konfigureret din session, kan dutart det og overvåg dets drift:
- Klik OK for at oprette sessionen.
- I Objektstifinder skal du udvide Sessions mappe for at se din nye session.
- Højreklik på sessionsnavnet og vælg Start-session for at begynde at optage begivenheder.
- For at se livedata skal du højreklikke på sessionen og vælge Se livedata.
- Stop sessionen ved at højreklikke og vælge Stop sessionen.
5. Oprettelse af udvidede begivenhedssessioner ved hjælp af T-SQL
5.1 Syntaks for OPRET EVENTSESSION
Oprettelse af udvidede eventsessioner med T-SQL giver præcis kontrol og muliggør scripting til automatiseret implementering. CREATE EVENT SESSION-sætningen følger en specifik syntaksstruktur.
Den grundlæggende syntaks inkluderer sessionsnavnet, ADD EVENT-klausuler for hver begivenhed, ADD TARGET-klausuler til lagringsdestinationer og valgfrie WITH-klausuler til sessionskonfiguration.
5.2 Oprettelse af en grundlæggende begivenhedssession
En basissession overvåger specifikke hændelser og skriver resultater til en tarfå. Sådan konstruerer du de vigtigste komponenter.
5.2.1 Definition af sessionsnavn og -indstillinger
Starved at oprette sessionen med et beskrivende navn:
CREATE EVENT SESSION [SampleSession] ON SERVER
ON SERVER-klausulen opretter en server-scoped session, der bevares på tværs af databaseændringer. For Azure SQL Database skal du bruge ON DATABASE til database-scoped sessioner.
5.2.2 Tilføjelse af begivenheder med TILFØJ BEGIVENHED
Tilføj hændelser, der skal registreres, ved hjælp af ADD EVENT-klausulen:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Dette registrerer alle udfyldte SQL-sætninger. Du kan tilføje flere hændelser ved at inkludere yderligere ADD EVENT-klausuler.
5.2.3 Konfiguration af hændelseshandlinger
Handlinger indsamler yderligere kontekst for hver begivenhed. Tilføj handlinger i parentes efter begivenhedsnavnet:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Dette eksempel registrerer SQL-teksten, databasenavnet og brugernavnet for hver udfyldt sætning.
5.2.4 Indstilling af hændelsesprædikater (WHERE-klausul)
Prædikerer filterhændelser for at reducere datamængden. Brug WHERE-klausulen i hændelsesdefinitionen:
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 efter udsagn med en varighed på mere end 5 sekunder (5,000,000 mikrosekunder).
5.3 Tilføjelse af begivenhed Tarfår
Tardefinerer, hvor hændelsesdata gemmes, og hvordan de behandles.
5.3.1 FØJ TARGET-syntaks
Tilføj tarbruger ADD'en TARGET-klausul efter at alle hændelser er defineret:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Præfikset package0 angiver tar`get` kommer fra basispakken.
5.3.2 Konfiguration Tarhent parametre
Hver tar`get`-typen accepterer specifikke parametre. For `event_file` skal du konfigurere `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 konfiguration opretter filer på op til 50 MB hver og vedligeholder op til 5 filer gennem rollover.
5.4 Sessionsindstillinger og -valgmuligheder
WITH-klausulen konfigurerer indstillinger på sessionsniveau, der styrer adfærd og ressourceforbrug.
5.4.1 MAX_MEMORY og EVENT_RETENTION_MODE
Styr hukommelsesallokering og hændelseshåndtering under pres:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
EVENT_RETENTION_MODE-indstillingerne inkluderer ALLOW_SINGLE_EVENT_LOSS for minimal hukommelsesforbrug, ALLOW_MULTIPLE_EVENT_LOSS for moderat overhead og NO_EVENT_LOSS for fuldstændig dataretention ved c.ost af potentiel præstationspåvirkning.
5.4.2 MAX_DISPATCH_LATENCY
Angiv den maksimale tid, som begivenheder kan forblive i buffere, før de skrives til tarfår:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Lavere værdier giver mere realtidsdata ved cost af øgede I/O-operationer.
5.4.3 HUKOMMELSESPARTITIONSTILSTAND
Optimer hukommelsespartitionering til din hardwarekonfiguration:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Indstillingerne inkluderer NONE for enkelt partition, PER_NODE for NUMA-systemer og PER_CPU for maksimal samtidighed på systemer med flere CPU'er.
5.5 StarAfbrydelse, afbrydelse og ændring af sessioner
Administrer sessionsstatus og -konfiguration via ALTER EVENT SESSION-sætninger.
5.5.1 ÆNDR BEGIVENHEDSSESSION for Start/Stop
Starta-session efter oprettelse:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Stop en kørende session:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Ændring af eksisterende sessioner
Rediger sessionskonfigurationen, mens den er stoppet. Tilføj begivenheder:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Fjern begivenheder:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Slette eventsessioner
Fjern en session helt med DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Sessionen skal stoppes, før den afbrydes.
6. Arbejde med begivenhed Targår i detaljer
6.1 event_fil Tarhent konfiguration
Event_filen target tilbyder permanent lagring af hændelsesdata med fleksible konfigurationsmuligheder.
6.1.1 Filsti og navngivningskonventioner
Angiv den fulde sti og filnavnet for hændelsesfiler:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Brug .xel-filtypenavnet til udvidede hændelseslogfiler. Sørg for, at SQL Server Servicekontoen har skrivetilladelser til den angivne mappe.
6.1.2 Filoverførsel og størrelsesstyring
Konfigurer automatisk filoverførsel for at administrere diskplads:
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 Udvidede begivenheder opretter en ny fil med et forøget suffiks. Når der er nået 10 filer, overskrives den ældste fil.
6.1.3 Læsning af hændelsesfildata
Forespørg om hændelsesfildata ved hjælp af sys.fn_xe_file_target_read_file-funktion:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Jokertegnmønsteret læser alle filer, der er knyttet til sessionen.
6.2 ringbuffer Tarfå brug
Ringbufferen tarHent lagrede begivenheder i hukommelsen for hurtig adgang til den seneste aktivitet.
6.2.1 Hukommelsesbaseret hændelseslagring
Konfigurer ring_buffer til hukommelsesbaseret lagring:
ADD TARGET package0.ring_buffer
Begivenheder forbliver kun tilgængelige, mens sessionen er aktiv, og SQL Server kører. Data er lost når sessionen stopper, eller serveren genoptagertarts.
6.2.2 Bufferstørrelse og -konfiguration
Kontrolhukommelsesallokering for ringbufferen:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Angiv hukommelse i KB. Når bufferen er fyldt, kasseres ældre hændelser ved hjælp af en FIFO-metode.
6.2.3 Forespørgsel på ringbufferdata
Adgang 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 indeholder XML-formateret hændelsesinformation.
6.3 event_counter Tarfå
Event_counter-funktionen target tilbyder simpel optælling uden detaljeret datalagring:
ADD TARGET package0.event_counter
Denne tarFå spor på hændelsesfrekvensen med minimal overhead, hvilket er nyttigt til overvågning af store mængder, hvor kun antal tæller.
6.4 histogram Tarfå
Histogrammet tarHent grupper af begivenheder efter feltværdier:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Denne konfiguration opretter et histogram, der viser fordelingen af hændelser på tværs af databaser.
6.5 par_matchning Tarfå
Par_matchningen target korrelerer relaterede begivenheder såsom låseopkøb med udgivelser:
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 muliggør analyse af parrede operationer og deres varighed.
7. Visning og analyse af udvidede hændelsesdata
7.1 Brug af SSMS til at se livedata
SQL Server Management Studio tilbyder en grafisk brugerflade til visning af Extended Events-data i realtid:
- I Objekt Explorer skal du udvide Management -> Udvidede arrangementer -> Sessions.
- Højreklik på din aktive session.
- Type Se livedata for at åbne livedatafremviseren.
- Begivenheder vises i gitteret, efterhånden som de opstår.
- Klik på individuelle hændelser for at se detaljerede feltværdier i detaljeruden.
- Brug filtrene i værktøjslinjen til at fokusere på bestemte hændelsestyper eller feltværdier.
7.2 Forespørgsel på hændelsesfildata med T-SQL
T-SQL-forespørgsler giver fleksibel analyse af registrerede hændelsesdata.
7.2.1 sys.fn_xe_file_target_read_file Funktion
Læs hændelsesfildata ved hjælp af denne systemfunktion:
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
);
Funktionen returnerer én række pr. hændelse med XML-formaterede detaljer.
7.2.2 Parsing af XML-hændelsesdata
Udtræk specifikke værdier fra XML-hændelsesdataene:
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-udtryk udtrækker individuelle feltværdier fra XML-strukturen.
7.2.3 Konvertering af hændelsesdata til tabeller
Opret strukturerede resultatsæt fra hændelsesdata:
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 Forespørgsel på ringbufferdata
Udtræk data fra ring_buffer tarfår:
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 udvidede hændelser
SQL Server tilbyder adskillige DMV'er og katalogvisninger til administration og overvågning af udvidede begivenhedssessioner.
7.4.1 sys.server_event_sessions
Se sessionsdefinitioner gemt 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 katalogvisning viser konfigurationsdetaljer for alle definerede sessioner.
7.4.2 sys.dm_xe_sessions
Se aktuelt aktive sessioner:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Denne DMV leverer runtime-oplysninger om aktive udvidede begivenhedssessioner.
7.4.3 sys.dm_xe_session_tarfår
Se tarbliver tilknyttet aktive sessioner:
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
Yderligere visninger giver omfattende sessionsoplysninger:
- sys.dm_xe_session_events: Viser hændelser i aktive sessioner
- sys.dm_xe_session_event_actions: Viser handlinger konfigureret til sessionshændelser
- sys.dm_xe_objects: Katalogiserer alle tilgængelige hændelser, handlinger og tarfår
- sys.dm_xe_object_columns: Detaljefelter tilgængelige for hver hændelsestype
- sys.dm_xe_packages: Viser alle Extended Event-pakker
8. Praktiske anvendelsesscenarier og eksempler
8.1 Overvågning af udførelse af SQL-sætninger
Sporing af udførelse af SQL-sætninger giver indsigt i forespørgselsmønstre og ydeevnekarakteristika.
8.1.1 Sporing af sql_statement_completed-hændelser
Opret en session for at overvåge færdige SQL-sætninger:
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 efter database eller applikation
Fokuser på specifikke databaser eller applikationer ved hjælp af prædikater:
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 Indsamling af oplysninger om fastlåste situationer
Analyse af dødvande kræver indsamling af detaljerede oplysninger om modstridende transaktioner.
8.2.1 xml_deadlock_report Hændelse
Opret en session for at registrere komplette deadlock-grafer:
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 Analyse af deadlock-grafer
Uddrag og analysér information om fastlåste situationer:
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';
Dødlåsgrafen indeholder detaljer om processer, ressourcer og udvælgelse af ofre.
8.3 Problemer med sporing af forespørgslers ydeevne
Identificer dårligt præsterende forespørgsler ved hjælp af varigheds- og ressourceforbrugsmålinger.
8.3.1 Detektion af langvarige forespørgsler
Registreringsforespørgsler, der overstiger bestemte varighedsgrænser:
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 af udførelsesplan
Planer for registrering af forespørgsler til ydeevneanalyse:
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ågning af login og sikkerhedshændelser
Spor godkendelses- og autorisationsaktiviteter til sikkerhedsrevision.
8.4.1 Sporing af succesfulde og mislykkede login
Overvåg både vellykkede og mislykkede loginforsøg:
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 Ændringer af tilladelser
Ændringer af sikkerhedstilladelser for spor:
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ågning på databaseniveau
Overvåg databasespecifikke operationer og tilstandsændringer.
8.5.1 Sikkerhedskopierings- og gendannelseshændelser
Spor backup- og gendannelsesoperationer:
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 Ændringer i databasetilstand
Overvåg databasetilstandsovergange:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Detektering af databasekorruption og integritetsproblemer
SQL Server Udvidede hændelser giver tidlige varslingsfunktioner til at opdage potentiel databasekorruption, hvilket muliggør proaktiv indgriben, før problemer eskalerer.
8.6.1 Nøglebegivenheder for korruptionsdetektion
Flere hændelser signalerer potentiel korruption eller I/O-problemer.
8.6.1.1 error_reported Hændelse for kritiske fejl
Hændelsen error_reported registrerer alle SQL Server fejl, herunder korruptionsrelaterede fejlnumre:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Fejl 823 angiver I/O-fejl, 824 signalerer logiske konsistensfejl, og 825 rapporterer succesfulde læseforsøg, der kan indikere hardwareproblemer.
8.6.1.2 database_suspect_data_page Hændelse
Denne hændelse udløses, når SQL Server støder på en mistænkelig side:
ADD EVENT sqlserver.database_suspect_data_page
Mistænkelige sider indikerer potentiel beskadigelse og registreres i tabellen msdb.dbo.suspect_pages.
8.6.1.3 errorlog_written Hændelse
Optag poster skrevet til SQL Server fejllog:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Oprettelse af en korruptionsovervågningssession
Etabler en omfattende session for korruptionsdetektion og -overvågning.
8.6.2.1 Filtrering efter korruptionsfejlnumre (823, 824, 825)
Opret en tarGete-session med fokus på korruptionsindikatorer:
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 Indstilling af passende alvorlighedsniveauer
Medtag fejl med høj alvorlighed, der kan indikere korruption:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Alvorlighedsgrad 20 og derover indikerer problemer på systemniveau, der ofte er relateret til korruption.
8.6.2.3 Konfiguration af hændelsesfil Tarfå til alarmer
Gem korruptionshændelser til analyse og alarmering:
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 Analyse af data om korruptionshændelser
Uddrag og fortolk korruptionsrelaterede hændelser fra indsamlede data.
8.6.3.1 Identifikation af mistænkelige sider
Forespørgsel efter database_suspect_data_page-hændelser:
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 Udtrækning af fejloplysninger og kontekst
Analysér error_reported-hændelser for korruptionsmø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 Integration med DBCC CHECKDB
Brug data om udvidede begivenheder som vejledning DBCC CHECKDB udførelse.
8.6.4.1 Udløsning af DBCC CHECKDB baseret på hændelser
Når der registreres korruptionshændelser, skal du udføre DBCC CHECKDB for omfattende validering:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Udvidede hændelser giver den tidlige advarsel, mens DBCC CHECKDB udfører grundig validering.
8.6.4.2 Automatiserede arbejdsgange til korruptionshåndtering
Implementer automatiserede svar ved at overvåge hændelsesfilen:
- Konfigurer SQL Server Agentjob til periodisk at forespørge på filen med overvågning af korruptionshændelse.
- Når der findes korruptionshændelser, skal du udføre DBCC CHECKDB på den berørte database.
- Send e-mail-advarsler til databaseadministratorer med hændelsesdetaljer og DBCC CHECKDB-resultater.
- Logfør resultater til en centraliseret overvågningstabel til trendanalyse.
8.6.4.3 Balancering af proaktiv overvågning med ydeevne
Udvidede begivenheder tilbyder korruptionsdetektion med lav overhead sammenlignet med hyppig DBCC CHECKDB-udførelse:
- Kør udvidede hændelser kontinuerligt for at detektere korruption i realtid
- Kør kun DBCC CHECKDB, når der vises indikatorer for korruption
- Planlæg regelmæssig DBCC CHECKDB i vedligeholdelsesvinduer
- Brug udvidede hændelser til at identificere, hvilke databaser der kræver øjeblikkelig opmærksomhed
Denne tilgang giver proaktiv overvågning uden det betydelige ressourceforbrug, der er forbundet med konstante integritetskontroller.
8.6.4.4 Reparer beskadiget database
Hvis der opdages fejl i databasen, kan du bruge DBCC CHECKDB til at rette mindre fejl. Hvis det mislykkes, kan du prøve en tredjepartssoftware. SQL-databasegendannelsesværktøj, som generelt tilbyder en højere gendannelsesrate på alvorligt korrupte databaser.
9. Server-scoped vs. database-scoped udvidede hændelser
9.1 Server-scoped Event Sessions
Server-scoped sessioner overvåger aktivitet på tværs af hele SQL Server forekomst. Disse sessioner oprettes med ON SERVER-klausulen og bevares i masterdatabasen.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Server-scoped sessioner indfanger hændelser fra alle databaser og er velegnede til overvågning på instansniveau.
9.2 Databaseomfattede hændelsessessioner (Azure SQL Database)
Databasebaserede sessioner er begrænset til en enkelt database og bruges primært i Azure SQL Database, hvor adgang på serverniveau er begrænset:
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 gemmes hændelsesfiler i Azure Blob Storage i stedet for lokale filsystemer.
9.3 Forskelle og anvendelsesscenarier
Server-scoped sessioner giver omfattende overvågning på tværs af alle databaser, men kræver udvidede tilladelser. Database-scoped sessioner tilbyder isolation og er passende til overvågning af specifikke applikationer eller lejere.
Brug server-scoped sessioner til centraliseret overvågning, fejlfinding af ydeevne på tværs af databaser og sikkerhedsrevision. Brug database-scoped sessioner i Azure SQL Database, miljøer med flere lejere eller ved delegering af overvågningsansvar til applikationsteams.
10. Udvidede hændelser i Azure SQL Database
10.1 Azure-specifikke overvejelser
Azure SQL Database implementerer udvidede hændelser med nogle forskelle fra lokale systemer SQL ServerSessioner er som standard databasebegrænsede, og lagring af begivenhedsfiler bruger Azure Blob Storage i stedet for lokale filsystemer.
Godkendelse til Azure Blob Storage kræver et SAS-token, der er konfigureret i hændelsesfilen. target. Forbindelsesstrenge refererer til den lagerkonto og container, hvor hændelsesfilerne er gemt.
10.2 tilgængelig(e) Tarkommer i Azure
Azure SQL Database understøtter disse udvidede hændelser tarfår:
- event_file: Skriver til Azure Blob Storage
- ring_buffer: Hukommelsesbaseret lagring med samme funktionalitet som lokalt
- event_counter: Tæller hændelsesforekomster
Event_filen target kræver konfiguration med Azure Blob Storage-legitimationsoplysninger:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Oprettelse af databasebaserede sessioner
Opret en session 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;
Databasebaserede sessioner i Azure opfører sig på samme måde som serverbaserede sessioner on-premises, men med omfanget begrænset til den aktuelle database.
11. Bedste praksis og ydeevneoptimering
11.1 Minimering af ydeevnepåvirkning
Udvidede hændelser er designet til minimal overhead, men forkert konfiguration kan påvirke ydeevnen. Følg disse retningslinjer:
- Brug specifikke prædikater til at filtrere hændelser i stedet for at registrere alt
- Undgå at indsamle unødvendige handlinger, der øger behandlingsomkostningerne
- Vælg passende tarbliver baseret på behov for dataopbevaring
- Indstil rimelige bufferstørrelser og afsendelsesforsinkelser
- Overvåg forbruget af sessionsressourcer ved hjælp af DMV'er
11.2 Valg af de rigtige begivenheder og filtre
Vælg hændelser, der direkte adresserer dine overvågningsmål. Undgå højfrekvente hændelser, medmindre det er nødvendigt, og anvend altid prædikater for at reducere datamængden.
For eksempel, i stedet for at registrere alle sql_statement_completed-hændelser, filtrer efter specifikke databaser eller varighedstærskler:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 TarFå udvælgelsesretningslinjer
Vælg tarbliver baseret på dine analysekrav:
- Brug event_file til detaljeret historisk analyse og langsigtet opbevaring
- Brug ring_buffer til overvågning i realtid med minimal I/O-påvirkning
- Brug event_counter, når kun frekvensen er vigtig
- Brug histogram til fordelingsanalyse
- Brug pair_matching til korreleret hændelsesanalyse
11.4 Anbefalinger til sessionskonfiguration
Konfigurer sessioner med passende ressourcegrænser:
- Indstil MAX_MEMORY baseret på forventet hændelsesvolumen og serverressourcer
- Brug ALLOW_SINGLE_EVENT_LOSS for minimal overhead i most scenarier
- Indstil MAX_DISPATCH_LATENCY for at afbalancere realtidsbehov med ydeevne
- Brug PER_CPU hukommelsespartitionering på systemer med flere processorer
- Undgå STARTUP_STATE=ON medmindre kontinuerlig overvågning er påkrævet
11.5 Administration af størrelse og opbevaring af begivenhedsfiler
Konfigurer filoverførsel for at forhindre ubegrænset diskbrug:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Denne konfiguration indeholder cirka 1 GB hændelsesdata (10 filer × 100 MB). Juster konfigurationen baseret på dine opbevaringskrav og tilgængelig lagerplads.
12. Fejlfinding af forlængede hændelser
12.1 Almindelige problemer og løsninger
Almindelige problemer med udvidede hændelser omfatter sessioner, der ikke registrerer data, forringet ydeevne, filer tarfå problemer og uventet sessionsadfærd.
12.2 Sessionen registrerer ikke data
Hvis en session ikke registrerer forventede hændelser:
- Bekræft at sessionen er started ved hjælp af sys.dm_xe_sessions.
- Kontrollér prædikater for at sikre, at de ikke filtrerer alle hændelser fra.
- Bekræft at begivenheder udløses efter temporarfjerner filtre i ny og næ.
- Gennemgå tilladelser for at sikre, at du har adgang til at se sessionsdata.
- Kontroller, at target-konfigurationen er korrekt og skrivbar.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Forringelse af ydeevne
Hvis udvidede hændelser forårsager problemer med ydeevnen:
- Tilføj prædikater for at reducere hændelsesvolumen.
- Fjern unødvendige handlinger, der samler supplementertary data.
- Øg MAX_DISPATCH_LATENCY for at reducere skrivefrekvensen.
- Skift EVENT_RETENTION_MODE til ALLOW_SINGLE_EVENT_LOSS.
- Overvej at bruge ring_buffer i stedet for event_file til højfrekvente hændelser.
12.4-fil Tarfå problemer
File (Felt) tarProblemer med at få data relaterer sig ofte til tilladelser eller diskplads:
- Bekræft SQL Server servicekontoen har skrivetilladelser til tarfå katalog.
- Sørg for, at der er tilstrækkelig diskplads tilgængelig.
- Kontroller, at den angivne sti findes og er tilgængelig.
- Gennemgå konfigurationen af filoverførsel, hvis filer ikke rulles over som forventet.
12.5 Fejlfinding med systemvisninger
Brug DMV'er til at diagnosticere problemer med udvidede hændelser:
-- 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. Avancerede emner
13.1 Oprettelse af brugerdefinerede eventpakker
Avancerede brugere kan oprette brugerdefinerede eventpakker for at udvide SQL Server Udvidet eventfunktionalitet. Dette kræver C++-udvikling og integration med SQL Server udvidelsesramme.
Brugerdefinerede pakker muliggør overvågning af applikationsspecifikke hændelser eller integration af tredjepartsovervågningssystemer med Extended Events-infrastrukturen.
13.2 Skabeloner til begivenhedssessioner
SSMS tilbyder indbyggede skabeloner til almindelige overvågningsscenarier. Få adgang til skabeloner, når du opretter nye sessioner, via guiden:
- I dialogboksen Ny session skal du klikke på Skabelon dropdown.
- Vælg mellem tilgængelige skabeloner som f.eks. Sporing af forespørgselsdetaljer eller Systemtilstand.
- Rediger skabelonen, så den passer til dine specifikke behov.
13.3 Integration med overvågningsløsninger
Data om udvidede hændelser kan bruges til at understøtte virksomhedsovervågningsløsninger:
- Eksporter hændelsesdata til centraliserede logføringssystemer
- Parse hændelsesfiler og indlæse data i overvågningsdatabaser
- Opret brugerdefinerede dashboards ved hjælp af BI-værktøjer
- Udløs alarmer baseret på specifikke hændelsesmønstre
- Sammenhold SQL Server hændelser med applikations- og infrastrukturmålinger
13.4 Automatisering og planlægning
Automatiser administration af udvidede begivenheder ved hjælp af SQL Server Agenter:
- Opret job til start/stop sessioner i bestemte tidsvinduer
- Planlæg analyse og rapportering af begivenhedsfiler
- Implementer dataopbevaringspolitikker ved at arkivere eller slette gamle hændelsesfiler
- Automatiser reaktion på registrerede tilstande såsom ydeevneproblemer eller sikkerhedshændelser
14. Migration fra SQL Server Profiler
14.1 SQL Server Profiler-hændelser til udvidede hændelser-kortlægning
Microsoft leverer kortlægning mellem SQL Server Profiler begivenheder og udvidede begivenheder. Almindelige kortlægninger omfatter:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:BatchStarting -> sql_batch_starTing
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starTing
- Dødlåsgraf -> xml_deadlock_report
- Revisionslogin -> login
- Audit Logout -> Log ud
14.2 Konvertering af sporingsdefinitioner
Konverter eksisterende SQL Server Profiler sporer til udvidede begivenhedssessioner ved at identificere tilsvarende begivenheder og konfigurere passende prædikater. SSMS yder assistance til almindelige konverteringer.
Gennemgå sporingsfiltre og konverter dem til prædikater for udvidede hændelser. Handlinger i udvidede hændelser erstatter sporingskolonner fra SQL Server Profiler.
14.3 Præstationssammenligning
Udvidede begivenheder giver betydeligt bedre ydeevne end SQL Server Profiler. Benchmark-studier viser, at Extended Events bruger færre CPU-cyklusser og har mindre indflydelse på transaktionsgennemstrømningen.
Udvidede begivenheder bruger asynkron behandling og optimeret hukommelsesstyring, mens SQL Server Profiler er afhængig af synkron hændelsesregistrering, der blokerer, indtil sporingsbehandlingen er fuldført.
15. konklusion
15.1 Sammenfatning af nøglebegreber
SQL Server Extended Events leverer et kraftfuldt og letvægts framework til overvågning og fejlfinding SQL ServerArkitekturen består af begivenheder, handlinger, prædikater, targets og sessioner, der arbejder sammen om at registrere relevant serveraktivitet.
Sessioner kan oprettes ved hjælp af SSMS eller T-SQL, hvilket giver fleksibilitet til både ad hoc-fejlfinding og automatiseret overvågning. target-typer understøtter forskellige analysemetoder, fra realtidsovervågning med ring_buffer til historisk analyse med event_file.
Udvidede begivenheder leverer bedre ydeevne sammenlignet med SQL Server Profiler, samtidig med at den tilbyder mere omfattende overvågningsfunktioner. Systemet gør det muligt for databaseadministratorer og udviklere at diagnosticere problemer, optimere ydeevnen, forbedre sikkerheden og opretholde overholdelse af regler.
15.2 Næste skridt og yderligere ressourcer
For at fortsætte med at udvikle din SQL Server XEvents ekspertise:
- Implementer udvidede begivenheder i testmiljøer for at få praktisk erfaring
- Gennemgå Microsoft-dokumentationen for komplette begivenhedskataloger og detaljeret syntaksreference.
- Bliv Medlem SQL Server fællesskabsfora for at lære af andres erfaringer
- Udforsk avancerede scenarier som brugerdefinerede pakker og integration med overvågningsplatforme
- Udvikle et bibliotekrary af sessionskabeloner til almindelige overvågningsscenarier
16 Ofte stillede spørgsmål-sektion
Q: Hvad er SQL Server Udvidede begivenheder?
A: SQL Server Extended Events er et letvægts præstationsovervågningssystem integreret i SQL Server Databasemotor, der indsamler detaljerede oplysninger om serveroperationer med minimal overhead.
Q: Hvordan adskiller udvidede begivenheder sig fra SQL Server Profiler?
A: Udvidede hændelser giver bedre ydeevne, lavere overhead og mere fleksibel konfiguration end SQL Server Profiler. SQL Server Profiler er udfaset, og Microsoft anbefaler at bruge udvidede hændelser til alle overvågningsopgaver.
Q: Kan forlængede begivenheder påvirke SQL Server ydeevne?
A: Når de er korrekt konfigureret med passende prædikater og ressourcegrænser, har udvidede hændelser minimal indflydelse på ydeevnen. Dårlig konfiguration uden filtrering kan påvirke ydeevnen.
Q: Hvilke tilladelser kræves for at oprette udvidede begivenhedssessioner?
A: Du skal have tilladelsen ALTER ANY EVENT SESSION til server-scoped sessioner eller CONTROL-tilladelsen på databasen til database-scoped sessioner.
Q: Hvordan kan jeg se data om udvidede begivenheder?
A: Brug SQL Server Management Studios live-datafremviser, forespørg på hændelsesfiler med sys.fn_xe_file_target_read_file, eller forespørg ringbufferdata via DMV'er.
Q: Kan udvidede hændelser registrere databasekorruption?
A: Ja, Udvidede Hændelser kan registrere korruptionsrelaterede fejl (823, 824, 825) og mistænkelige sidehændelser, hvilket giver tidlig advarsel om potentielle korruptionsproblemer.
Q: Hvad er forskellen mellem begivenheder, handlinger og prædikater?
A: Hændelser er hændelser, du vil overvåge. Handlinger tilføjer supplerendetary-information til registrerede hændelser. Prædikerer filtrering af hændelser baseret på betingelser for at reducere datamængden.
Q: Hvordan overvåger jeg forespørgsler fra bestemte applikationer eller databaser?
A: Brug prædikater i din hændelseskonfiguration til at filtrere efter database_name, client_app_name eller andre relevante felter.
Q: Hvad targets, skal jeg bruge til udvidede begivenheder?
A: Brug event_file til vedvarende lagring og historisk analyse, ring_buffer til overvågning i realtid med lav overhead, event_counter til simpel frekvenssporing og histogram til fordelingsanalyse.
Q: Er udvidede hændelser tilgængelige i Azure SQL Database?
A: Ja, Azure SQL Database understøtter databasebegrænsede udvidede hændelser med hændelsesfiler gemt i Azure Blob Storage.
Q: Hvordan foretager jeg fejlfinding af en udvidet begivenhedssession, der ikke registrerer data?
A: Bekræft at sessionen er started, tjek at prædikater ikke filtrerer alle hændelser, bekræft tarHent konfiguration og gennemgå tilladelser ved hjælp af system-DMV'er.
Q: Kan jeg automatisere administration af udvidede begivenheder?
A: Ja, brug SQL Server Agentjob til start/stop-sessioner, analyser hændelsesfiler, implementer opbevaringspolitikker og reager på registrerede tilstande.
Referencer
- Hurtig Start: Udvidede begivenheder i SQL Server – Microsoft Learn
- Oversigt over udvidede begivenheder – Microsoft Learn
- SQL Server Udvidede begivenhedssessioner – Microsoft Learn
- Tarfår for udvidede begivenheder i SQL Server – Microsoft Learn
- SQL Server Udvidet eventmotor – Microsoft Learn
- SQL Server Profiler: Komplet guide
- DBCC CHECKDB: Komplet guide
- DataNumen SQL Recovery
Om forfatteren
Yuan Sheng er en senior databaseadministrator (DBA) med over 10 års erfaring inden for SQL Server miljøer og virksomhedsdatabaseadministration. Han har med succes løst hundredvis af databasegendannelsesscenarier på tværs af finansielle tjenester, sundhedsvæsenet og produktionsorganisationer.
Yuan har specialiseret sig i SQL Server databasegendannelse, løsninger med høj tilgængelighedog ydeevneoptimering. Hans omfattende praktiske erfaring omfatter administration af databaser på flere terabyte, implementering af Altid på tilgængelighedsgrupperog udvikling af automatiserede backup- og gendannelsesstrategier til missionskritiske forretningssystemer.
Gennem sin tekniske ekspertise og praktiske tilgang fokuserer Yuan på at skabe omfattende vejledninger, der hjælper databaseadministratorer og IT-professionelle med at løse komplekse SQL Server udfordringer effektivt. Han holder sig opdateret med det nyeste SQL Server udgivelser og Microsofts udviklende databaseteknologier, og tester regelmæssigt gendannelsesscenarier for at sikre, at hans anbefalinger afspejler bedste praksis i den virkelige verden.
Har spørgsmål vedr SQL Server gendannelse eller brug for yderligere vejledning i fejlfinding af databaser? Yuan er velkommen feedback og forslag for at forbedre disse tekniske ressourcer.

















