1. introduzione
1.1 Cosa sono SQL Server Eventi prolungati?
SQL Server Extended Events è un sistema di monitoraggio delle prestazioni leggero che consente ad amministratori e sviluppatori di raccogliere e analizzare dati dettagliati sull'attività del server. Questo sistema è integrato in SQL Server Database Engine e fornisce approfondimenti completi sia sulle normali operazioni che sugli scenari di risoluzione dei problemi.
1.2 Perché utilizzare gli eventi estesi per il monitoraggio?
SQL Server Extended Events offre diversi vantaggi interessanti per il monitoraggio e la risoluzione dei problemi del database:
- Impatto minimo sulle prestazioni con architettura leggera
- Controllo granulare sulla raccolta dati e sul filtraggio degli eventi
- Raccolta dati personalizzabile su misura per specifiche esigenze di monitoraggio
- Possibilità di acquisire eventi da più pacchetti contemporaneamente
- Capacità di filtraggio flessibili per concentrarsi sulle operazioni rilevanti
- Supporto per il monitoraggio del sistema di produzione senza compromettere l'esperienza utente
- Monitoraggio completo delle metriche delle prestazioni
- Funzionalità diagnostiche avanzate per la risoluzione dei problemi
- Manutenzione della traccia di controllo per i requisiti di conformità
- Opzioni di analisi dei dati storici e in tempo reale
1.3 Eventi estesi vs SQL Server Profiler
Mentre SQL Server Profiler Sebbene MS SQL Extended Events sia uno strumento di monitoraggio tradizionale, offre un'alternativa più efficiente. Gli Extended Events consumano meno risorse di sistema e offrono una migliore scalabilità per gli ambienti di produzione.
SQL Server Profiler è ora obsoleto e Microsoft consiglia di migrare a Eventi estesi per tutte le attività di monitoraggio.
2. Comprensione dell'architettura degli eventi estesi
2.1 Componenti del motore degli eventi estesi
Il motore Extended Events è costituito da diversi componenti principali che interagiscono per acquisire, elaborare e archiviare i dati degli eventi. La comprensione di questi componenti aiuta a progettare soluzioni di monitoraggio efficaci.
- Mittente: Il componente dispatcher coordina il flusso di eventi dalle sorgenti al motore degli eventi estesi. Quando si verifica un evento, il dispatcher riceve la notifica e la indirizza alle sessioni attive che hanno sottoscritto quello specifico tipo di evento.
- Buffer: I buffer memorizzano temporaneamente i dati degli eventi in memoria prima di scriverli sui target. Questo meccanismo di buffering migliora le prestazioni riducendo le operazioni di I/O. Le dimensioni del buffer e le impostazioni di gestione possono essere configurate per bilanciare l'utilizzo della memoria con i requisiti di acquisizione dei dati.
- Sessione: Una sessione definisce l'ambito del monitoraggio degli eventi. Specifica quali eventi acquisire, quali azioni eseguire, quali predicati applicare e dove memorizzare i risultati. Le sessioni possono essere create, modificate, avviate e interrotte in modo indipendente.
- Istanza di destinazione: Le istanze di destinazione rappresentano le destinazioni di archiviazione per i dati degli eventi acquisiti. Ogni sessione può scrivere su una o più destinazioni, come file, buffer circolari o contatori. Le destinazioni elaborano e memorizzano le informazioni sugli eventi per successive analisi.
2.2 Pacchetti evento
SQL Server Extended Events organizza le funzionalità in pacchetti. Ogni pacchetto contiene eventi, azioni, tipi, predicati e destinazioni correlati. I pacchetti più comuni includono sqlserver, sqlos e package0.
- Il pacchetto sqlserver fornisce eventi specifici del database, come query e transazioni.
- Il pacchetto sqlos contiene eventi del sistema operativo.
- Il pacchetto0 offre funzionalità generiche utilizzate in tutti i pacchetti.
2.3 Tipi di eventi e campi
Gli eventi rappresentano accadimenti all'interno SQL Server che si desidera monitorare. Ogni tipo di evento ha campi predefiniti che catturano informazioni rilevanti. Ad esempio, l'evento sql_statement_completed include campi per durata, tempo di CPU, letture e scritture.
Gli eventi possono essere sincroni o asincroni. Gli eventi sincroni si attivano durante l'operazione stessa, mentre gli eventi asincroni si attivano dopo il completamento. Comprendere le caratteristiche degli eventi aiuta a selezionare gli eventi più adatti alle proprie esigenze di monitoraggio.
2.4 azioni
Le azioni aggiungono informazioni supplementari agli eventi acquisiti. Quando si verifica un evento, vengono eseguite le azioni associate per raccogliere contesto aggiuntivo, come testo SQL, ID di sessione o informazioni sullo stack di chiamate.
Le azioni comuni includono sql_text per acquisire le istruzioni di query, database_name per identificare il database e client_hostname per tracciare il server di origine. Le azioni forniscono un contesto essenziale per la risoluzione dei problemi e l'analisi.
2.5 obiettivi
I target determinano come e dove vengono memorizzati i dati degli eventi. SQL Server Gli eventi estesi supportano diversi tipi di destinazione, tra cui:
- event_file per l'archiviazione su disco, che fornisce archiviazione persistente per analisi dettagliate
- ring_buffer per la conservazione basata sulla memoria, che offre un rapido accesso agli eventi recenti con un overhead minimo
- event_counter per il conteggio semplice
- istogramma per il raggruppamento
- pair_matching per correlare eventi correlati
2.6 Predicati (filtri)
I predicati filtrano gli eventi in base a condizioni specifiche, riducendo il volume dei dati acquisiti. È possibile filtrare per nome del database, nome dell'applicazione, ID di sessione, soglie di durata o qualsiasi valore di campo evento.
L'uso efficace dei predicati riduce al minimo l'impatto sulle prestazioni catturando solo gli eventi rilevanti. I predicati complessi combinano più condizioni utilizzando operatori logici per creare criteri di filtraggio precisi.
3. Stati e ciclo di vita della sessione dell'evento esteso
3.1 Stati della sessione: CREATE, ALTER e DROP
Le sessioni degli eventi estesi si sviluppano attraverso stati distinti:
- L'istruzione CREATE EVENT SESSION definisce una nuova sessione ma non la avvia. La sessione rimane in uno stato di arresto finché non viene attivata esplicitamente.
- L'istruzione ALTER EVENT SESSION modifica la configurazione della sessione o ne cambia lo stato tra arrestata e avviata.
- L'istruzione DROP EVENT SESSION rimuove completamente la definizione della sessione dal server.
3.2 Contenuto e caratteristiche della sessione
Ogni sessione contiene una raccolta di eventi, azioni, obiettivi e predicati. Le sessioni hanno dei limiti impliciti che ne definiscono l'ambito e il comportamento. Le opzioni di configurazione controllano l'allocazione della memoria, la conservazione degli eventi e la latenza di invio.
Le caratteristiche della sessione includono la sua persistenza dopo il riavvio del server, l'allocazione massima di memoria e la gestione della pressione sulla memoria. Queste impostazioni influiscono significativamente sul comportamento della sessione e sul consumo di risorse.
3.3 Limiti e pacchetti di sessione
I confini di sessione definiscono le relazioni tra eventi, obiettivi e pacchetti. Gli eventi di un pacchetto possono attivare azioni di un altro pacchetto, offrendo flessibilità nelle strategie di raccolta dati.
Le relazioni tra pacchetti consentono di combinare eventi provenienti da più fonti all'interno di un'unica sessione. Questa funzionalità consente scenari di monitoraggio completi che abbracciano diverse SQL Server sottosistemi.
4. Creazione di sessioni di eventi estesi tramite SSMS
4.1 Prerequisiti e configurazione
Prima di creare SQL Server Per le sessioni di eventi estesi, assicurarsi di disporre delle autorizzazioni appropriate. È necessaria l'autorizzazione ALTER ANY EVENT SESSION per le sessioni con ambito server o l'autorizzazione CONTROL sul database per le sessioni con ambito database.
Verificarlo SQL Server Management Studio è installato e connesso all'istanza di destinazione. Prendi familiarità con i requisiti di monitoraggio e identifica quali eventi e destinazioni si adattano meglio alle tue esigenze.
4.2 Accesso agli eventi estesi in Esplora oggetti
Per accedere all'interfaccia Eventi estesi in SSMS, seguire questi passaggi:
- Apri SQL Server Management Studio e connettiti al tuo SQL Server esempio.
- In Esplora oggetti, espandere Management -> Eventi estesi.
- Il nodo Eventi estesi contiene Sessioni and personalizzati cartelle per la gestione delle configurazioni di monitoraggio.
4.3 Creare una nuova sessione
Per creare una nuova sessione:
-
- Fare clic con il tasto destro del mouse su Sessioni cartella sotto Eventi estesi.
- Seleziona Nuova sessione per aprire la finestra di dialogo di configurazione. Il contenuto seguente utilizzerà questo metodo per creare una nuova sessione.
Nota: Il Nuova procedura guidata di sessione è disponibile anche per un'esperienza più guidata.
4.3.1 Configurazione generale della pagina
Sulla General pagina, configura le proprietà di base della sessione:
- Inserisci un nome di sessione nel Nome della sessione campo. Utilizzare nomi descrittivi che indichino lo scopo del monitoraggio.
- Seleziona facoltativamente Avviare la sessione dell'evento all'avvio del server. per abilitare l'attivazione automatica della sessione.
- Il modello di sessione predefinito è luminosoÈ possibile utilizzare altri modelli se si utilizza una configurazione predefinita.
4.3.2 Impostazione della pagina Eventi
Migliori Eventi La pagina consente di selezionare quali eventi monitorare:
- Seleziona il Eventi pagina da sinistra Seleziona una pagina pannello.
- Nel Archivio eventi, sfoglia gli eventi disponibili o usa la funzione di ricerca.
- Filtra gli eventi digitando parole chiave come "sql_statement_completed" per trovare gli eventi pertinenti.
- Selezionare l'evento desiderato, ad esempio sql_statement_completed.
- Fare clic sul pulsante freccia destra per spostare l'evento nella Eventi selezionati elenco.
4.3.3 Configurazione dell'archiviazione dei dati
Migliori Archiviazione dei dati la pagina definisce dove vengono archiviati i dati dell'evento:
- Seleziona il Archiviazione dei dati pagina da sinistra Seleziona una pagina pannello.
- Nel Obiettivi area, scegli un tipo di destinazione dal menu a tendina.
(1) target del file evento
Il target event_file memorizza i dati in file su disco con estensione .xel:
- Seleziona file_evento dal menu a tendina del tipo di destinazione.
- Specifica il percorso del file, ad esempio C:\temp\YourSession_Target.xel.
- Configura le opzioni di rollover per gestire lo spazio su disco impostando la dimensione massima dei file e il numero massimo di file.
- Il dispositivo di destinazione scrive continuamente gli eventi fino all'interruzione della sessione o al raggiungimento dei limiti di memoria.
(2) Target ring_buffer
Il target ring_buffer memorizza gli eventi in memoria per un accesso rapido senza I/O su disco:
- Seleziona buffer ad anello come tipo di destinazione.
- Configurare l'allocazione massima di memoria per il buffer.
- Tieni presente che gli eventi più vecchi vengono eliminati quando il buffer si riempie, rendendolo adatto al monitoraggio delle attività recenti.
(3) contatore eventi Target
Il target event_counter si limita a contare le occorrenze degli eventi senza memorizzare dati dettagliati. Ciò riduce al minimo il sovraccarico quando è necessaria solo l'informazione sulla frequenza.
(4) istogramma Target
L'istogramma raggruppa gli eventi in base a un valore di campo specificato, creando statistiche di distribuzione. Questo è utile per identificare modelli comuni o valori ad alta frequenza.
(5) pair_matching Target
Il target pair_matching correla eventi correlati come l'acquisizione e il rilascio del blocco. Ciò consente l'analisi delle operazioni accoppiate e delle loro relazioni temporali.
4.3.4 Impostazioni avanzate
Migliori Filtri La pagina fornisce opzioni di configurazione a livello di sessione:
- Seleziona il Filtri pagina da sinistra Seleziona una pagina pannello.
- Configurazione Modalità di conservazione degli eventi per controllare come vengono gestiti gli eventi sotto pressione di memoria.
- Impostato Latenza massima di invio per bilanciare l'elaborazione in tempo reale con le prestazioni del sistema.
- Configurazione Dimensione massima della memoria and Dimensione massima dell'evento in base alle tue esigenze di monitoraggio.
- Seleziona Modalità di partizione della memoria per ottimizzare ambienti con una o più CPU.
4.4 Configurazione dei filtri degli eventi (predicati)
I predicati riducono il volume dei dati filtrando gli eventi in base a criteri specifici. Per configurare i filtri:
- Sulla Eventi pagina, seleziona l'evento che vuoi filtrare, ad esempio "sql_statement_completed".
- Clicchi Configurazione per aprire la finestra di dialogo di configurazione dell'evento.
- Seleziona il Filtro (predicato) scheda.
- Nel Settore menu a discesa, seleziona il campo su cui filtrare, ad esempio la durata.
- Seleziona un Operatore, come “>”.
- Inserisci il filtro Valore, ad esempio 1000000 (1 secondo).
- Se necessario, aggiungere altre condizioni.
4.5 Selezione di azioni e campi evento
Per ogni evento è possibile selezionare i dati da raccogliere:
- Sulla Eventi pagina, seleziona l'evento da cui vuoi selezionare i dati, ad esempio "sql_statement_completed".
- Clicchi Configurazione per aprire la finestra di dialogo di configurazione dell'evento.
- Seleziona il Campi globali (azioni) scheda.
- Seleziona le azioni per aggiungere informazioni supplementari, come nome_database o nome_applicazione_client.
- Consulta gli Campi evento sezione per vedere quali campi vengono acquisiti automaticamente.
- Cancellare tutti i campi non necessari per ridurre il volume dei dati.
4.6 Avvio e gestione delle sessioni
Dopo aver configurato la sessione, è possibile avviarla e monitorarne il funzionamento:
- Clicchi OK per creare la sessione.
- In Esplora oggetti, espandere Sessioni cartella per visualizzare la nuova sessione.
- Fare clic con il pulsante destro del mouse sul nome della sessione e selezionare Inizia la sessione per iniziare a catturare gli eventi.
- Per visualizzare i dati in tempo reale, fare clic con il pulsante destro del mouse sulla sessione e selezionare Guarda i dati in diretta.
- Interrompere la sessione facendo clic con il tasto destro del mouse e selezionando Interrompi sessione.
5. Creazione di sessioni di eventi estesi utilizzando T-SQL
5.1 Sintassi di CREA SESSIONE EVENTO
La creazione di sessioni di eventi estesi con T-SQL offre un controllo preciso e consente la creazione di script per la distribuzione automatizzata. L'istruzione CREATE EVENT SESSION segue una struttura sintattica specifica.
La sintassi di base include il nome della sessione, le clausole ADD EVENT per ogni evento, le clausole ADD TARGET per le destinazioni di archiviazione e le clausole WITH opzionali per la configurazione della sessione.
5.2 Creazione di una sessione di eventi di base
Una sessione base monitora eventi specifici e scrive i risultati in una destinazione. Ecco come costruire i componenti essenziali.
5.2.1 Definizione del nome e delle opzioni della sessione
Inizia creando la sessione con un nome descrittivo:
CREATE EVENT SESSION [SampleSession] ON SERVER
La clausola ON SERVER crea una sessione con ambito server che persiste anche dopo le modifiche al database. Per il database SQL di Azure, utilizzare ON DATABASE per le sessioni con ambito database.
5.2.2 Aggiunta di eventi con AGGIUNGI EVENTO
Aggiungere eventi da catturare utilizzando la clausola ADD EVENT:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
In questo modo vengono acquisite tutte le istruzioni SQL completate. È possibile aggiungere più eventi includendo ulteriori clausole ADD EVENT.
5.2.3 Configurazione delle azioni degli eventi
Le azioni raccolgono contesto aggiuntivo per ogni evento. Aggiungi azioni tra parentesi dopo il nome dell'evento:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Questo esempio cattura il testo SQL, il nome del database e il nome utente per ogni istruzione completata.
5.2.4 Impostazione dei predicati degli eventi (clausola WHERE)
I predicati filtrano gli eventi per ridurre il volume dei dati. Utilizzare la clausola WHERE all'interno della definizione dell'evento:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Questo filtra le istruzioni con durata superiore a 5 secondi (5,000,000 di microsecondi).
5.3 Aggiunta di destinazioni evento
I target definiscono dove vengono archiviati i dati degli eventi e come vengono elaborati.
5.3.1 Sintassi AGGIUNGI TARGET
Aggiungi i target utilizzando la clausola ADD TARGET dopo aver definito tutti gli eventi:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Il prefisso package0 indica che la destinazione proviene dal pacchetto base.
5.3.2 Configurazione dei parametri di destinazione
Ogni tipo di destinazione accetta parametri specifici. Per event_file, configura filename, max_file_size e max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Questa configurazione crea file fino a 50 MB ciascuno, gestendo fino a 5 file tramite rollover.
5.4 Opzioni e impostazioni della sessione
La clausola WITH configura le opzioni a livello di sessione che controllano il comportamento e l'utilizzo delle risorse.
5.4.1 MAX_MEMORY e EVENT_RETENTION_MODE
Controllare l'allocazione della memoria e la gestione degli eventi sotto pressione:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
Le opzioni di EVENT_RETENTION_MODE includono ALLOW_SINGLE_EVENT_LOSS per un utilizzo minimo della memoria, ALLOW_MULTIPLE_EVENT_LOSS per un sovraccarico moderato e NO_EVENT_LOSS per la conservazione completa dei dati a costo di un potenziale impatto sulle prestazioni.
5.4.2 LATENZA_DI_DISPATCH_MAX
Imposta il tempo massimo di permanenza degli eventi nei buffer prima che vengano scritti nelle destinazioni:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Valori inferiori forniscono più dati in tempo reale a scapito di un aumento delle operazioni di I/O.
5.4.3 MEMORY_PARTITION_MODE
Ottimizza il partizionamento della memoria per la tua configurazione hardware:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Le opzioni includono NONE per una singola partizione, PER_NODE per i sistemi NUMA e PER_CPU per la massima concorrenza sui sistemi multi-CPU.
5.5 Avvio, arresto e modifica delle sessioni
Gestire lo stato e la configurazione della sessione tramite istruzioni ALTER EVENT SESSION.
5.5.1 ALTER EVENT SESSION per Start/Stop
Avviare una sessione dopo la creazione:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Interrompere una sessione in esecuzione:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Modifica delle sessioni esistenti
Modifica la configurazione della sessione mentre è in stop. Aggiungi eventi:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Rimuovi eventi:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Eliminazione delle sessioni degli eventi
Rimuovi completamente una sessione con DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Prima di abbandonare la sessione, è necessario interromperla.
6. Lavorare nel dettaglio con gli obiettivi degli eventi
6.1 event_file Configurazione di destinazione
Il target event_file fornisce una memoria persistente per i dati degli eventi con opzioni di configurazione flessibili.
6.1.1 Convenzioni di denominazione e percorso dei file
Specificare il percorso completo e il nome file per i file evento:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Utilizzare l'estensione .xel per i file di registro eventi estesi. Assicurarsi che SQL Server l'account di servizio ha i permessi di scrittura sulla directory specificata.
6.1.2 Rollover dei file e gestione delle dimensioni
Configurare il rollover automatico dei file per gestire lo spazio su disco:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Quando un file raggiunge i 50 MB, SQL Server Gli eventi estesi creano un nuovo file con un suffisso incrementale. Dopo aver raggiunto i 10 file, il file più vecchio viene sovrascritto.
6.1.3 Lettura dei dati del file evento
Interroga i dati del file degli eventi utilizzando la funzione 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
);
Il modello jolly legge tutti i file associati alla sessione.
6.2 Utilizzo target di ring_buffer
Il target ring_buffer memorizza gli eventi in memoria per un accesso rapido all'attività recente.
6.2.1 Archiviazione degli eventi basata sulla memoria
Configurare ring_buffer per l'archiviazione basata sulla memoria:
ADD TARGET package0.ring_buffer
Gli eventi rimangono accessibili solo mentre la sessione è attiva e SQL Server è in esecuzione. I dati vengono persi quando la sessione si interrompe o il server si riavvia.
6.2.2 Dimensione e configurazione del buffer
Controlla l'allocazione della memoria per il buffer ad anello:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Specificare la memoria in KB. Quando il buffer si riempie, gli eventi più vecchi vengono scartati utilizzando un approccio FIFO.
6.2.3 Interrogazione dei dati del buffer ad anello
Accedere ai dati del buffer ad anello tramite DMV:
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';
Il campo target_data contiene informazioni sugli eventi in formato XML.
6.3 event_counter Target
Il target event_counter fornisce un semplice conteggio senza memorizzazione dettagliata dei dati:
ADD TARGET package0.event_counter
Questo target tiene traccia della frequenza degli eventi con un sovraccarico minimo, risultando utile per il monitoraggio di grandi volumi in cui contano solo i conteggi.
6.4 istogramma Target
L'istogramma raggruppa gli eventi in base ai valori dei campi:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Questa configurazione crea un istogramma che mostra la distribuzione degli eventi nei database.
6.5 pair_matching Target
Il target pair_matching correla eventi correlati come l'acquisizione di blocchi con i relativi rilasci:
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'
)
Ciò consente l'analisi delle operazioni accoppiate e della loro durata.
7. Visualizzazione e analisi dei dati degli eventi estesi
7.1 Utilizzo di SSMS per visualizzare dati in tempo reale
SQL Server Management Studio fornisce un'interfaccia grafica per visualizzare i dati degli eventi estesi in tempo reale:
- In Esplora oggetti, espandere Management -> Eventi estesi -> Sessioni.
- Fai clic con il pulsante destro del mouse sulla sessione attiva.
- Seleziona Guarda i dati in diretta per aprire il visualizzatore di dati in tempo reale.
- Gli eventi vengono visualizzati nella griglia man mano che si verificano.
- Fare clic sui singoli eventi per visualizzare i valori dettagliati dei campi nel riquadro dei dettagli.
- Utilizza i filtri della barra degli strumenti per concentrarti su specifici tipi di eventi o valori di campo.
7.2 Interrogazione dei dati del file di eventi con T-SQL
Le query T-SQL forniscono un'analisi flessibile dei dati degli eventi acquisiti.
7.2.1 Funzione sys.fn_xe_file_target_read_file
Leggi i dati del file evento utilizzando questa funzione di sistema:
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
);
La funzione restituisce una riga per evento con dettagli in formato XML.
7.2.2 Analisi dei dati degli eventi XML
Estrarre valori specifici dai dati dell'evento XML:
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;
Le espressioni XQuery estraggono i valori dei singoli campi dalla struttura XML.
7.2.3 Conversione dei dati degli eventi in tabelle
Crea set di risultati strutturati dai dati degli eventi:
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 Interrogazione dei dati del buffer ad anello
Estrarre i dati dai target di ring_buffer:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 Viste di sistema per eventi estesi
SQL Server fornisce diversi DMV e viste di catalogo per la gestione e il monitoraggio delle sessioni di eventi estesi.
7.4.1 sys.server_event_sessions
Visualizza le definizioni di sessione memorizzate nel server:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Questa vista catalogo mostra i dettagli di configurazione per tutte le sessioni definite.
7.4.2 sys.dm_xe_sessions
Visualizza le sessioni attualmente attive:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Questo DMV fornisce informazioni di runtime sulle sessioni attive di eventi estesi.
7.4.3 sys.dm_xe_session_targets
Visualizza gli obiettivi associati alle sessioni attive:
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 Altri DMV utili
Ulteriori visualizzazioni forniscono informazioni complete sulla sessione:
- sys.dm_xe_session_events: Elenca gli eventi nelle sessioni attive
- sys.dm_xe_session_event_actions: mostra le azioni configurate per gli eventi di sessione
- sys.dm_xe_objects: cataloga tutti gli eventi, le azioni e i target disponibili.
- sys.dm_xe_object_columns: Campi dettagliati disponibili per ogni tipo di evento
- sys.dm_xe_packages: elenca tutti i pacchetti di eventi estesi
8. Casi d'uso pratici ed esempi
8.1 Monitoraggio dell'esecuzione delle istruzioni SQL
Il monitoraggio dell'esecuzione delle istruzioni SQL fornisce informazioni sui modelli di query e sulle caratteristiche delle prestazioni.
8.1.1 Monitoraggio degli eventi sql_statement_completed
Crea una sessione per monitorare le istruzioni SQL completate:
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 Filtraggio per database o applicazione
Concentrarsi su database o applicazioni specifici utilizzando i predicati:
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 Acquisizione delle informazioni sullo stallo
L'analisi dello stallo richiede l'acquisizione di informazioni dettagliate sulle transazioni in conflitto.
8.2.1 Evento xml_deadlock_report
Crea una sessione per catturare grafici completi di deadlock:
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 Analisi dei grafici di deadlock
Estrarre e analizzare le informazioni sullo stallo:
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';
Il grafico di stallo contiene dettagli sui processi, sulle risorse e sulla selezione delle vittime.
8.3 Monitoraggio dei problemi di prestazioni delle query
Identificare le query con prestazioni scarse utilizzando parametri di durata e consumo di risorse.
8.3.1 Rilevamento delle query di lunga durata
Acquisisci query che superano specifiche soglie di durata:
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 Analisi del piano di esecuzione
Piani di query di acquisizione per l'analisi delle prestazioni:
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 Monitoraggio degli eventi di accesso e di sicurezza
Monitorare le attività di autenticazione e autorizzazione per l'audit di sicurezza.
8.4.1 Monitoraggio del successo e del fallimento dell'accesso
Monitora sia i tentativi di accesso riusciti che quelli falliti:
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 Modifiche ai permessi
Tieni traccia delle modifiche alle autorizzazioni di sicurezza:
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 Monitoraggio a livello di database
Monitorare le operazioni specifiche del database e le modifiche di stato.
8.5.1 Eventi di backup e ripristino
Traccia le operazioni di backup e ripristino:
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 Modifiche allo stato del database
Monitorare le transizioni di stato del database:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Rilevamento di problemi di corruzione e integrità del database
SQL Server Extended Events offre funzionalità di allerta precoce per rilevare potenziali danneggiamenti del database, consentendo un intervento proattivo prima che i problemi degenerino.
8.6.1 Eventi chiave per il rilevamento della corruzione
Diversi eventi segnalano potenziali problemi di corruzione o di I/O.
8.6.1.1 evento error_reported per errori critici
L'evento error_reported cattura tutto SQL Server errori, inclusi i numeri di errore correlati alla corruzione:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
L'errore 823 indica errori di I/O, l'errore 824 segnala errori di coerenza logica e l'errore 825 segnala tentativi di lettura riusciti che potrebbero indicare problemi hardware.
8.6.1.2 Evento database_suspect_data_page
Questo evento si attiva quando SQL Server incontra una pagina sospetta:
ADD EVENT sqlserver.database_suspect_data_page
Le pagine sospette indicano un potenziale danneggiamento e vengono registrate nella tabella msdb.dbo.suspect_pages.
8.6.1.3 Evento errorlog_script
Cattura le voci scritte nel SQL Server registro degli errori:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Creazione di una sessione di monitoraggio della corruzione
Istituire una sessione completa per il rilevamento e il monitoraggio della corruzione.
8.6.2.1 Filtraggio per numeri di errore di corruzione (823, 824, 825)
Crea una sessione mirata incentrata sugli indicatori di corruzione:
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 Impostazione di livelli di gravità appropriati
Includi errori di gravità elevata che potrebbero indicare corruzione:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
I livelli di gravità pari o superiori a 20 indicano problemi a livello di sistema spesso correlati alla corruzione.
8.6.2.3 Configurazione del file di destinazione degli eventi per gli avvisi
Memorizzare gli eventi di corruzione per analisi e avvisi:
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 Analisi dei dati degli eventi di corruzione
Estrarre e interpretare gli eventi correlati alla corruzione dai dati acquisiti.
8.6.3.1 Identificazione delle pagine sospette
Query per eventi database_suspect_data_page:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Estrazione dei dettagli e del contesto dell'errore
Analizza gli eventi error_reported per individuare modelli di corruzione:
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 Integrazione con DBCC CHECKDB
Utilizzare i dati degli eventi estesi per guidare DBCC CHECKDB esecuzione.
8.6.4.1 Attivazione di DBCC CHECKDB in base agli eventi
Quando vengono rilevati eventi di danneggiamento, eseguire DBCC CHECKDB per una convalida completa:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Gli eventi estesi forniscono un avviso tempestivo, mentre DBCC CHECKDB esegue una convalida completa.
8.6.4.2 Flussi di lavoro automatizzati per la risposta alla corruzione
Implementare risposte automatiche monitorando il file degli eventi:
- Configurazione SQL Server Lavoro dell'agente per interrogare periodicamente il file degli eventi di monitoraggio della corruzione.
- Quando vengono rilevati eventi di danneggiamento, eseguire DBCC CHECKDB sul database interessato.
- Invia avvisi via email agli amministratori di database con i dettagli dell'evento e i risultati di DBCC CHECKDB.
- Registrare i risultati in una tabella di monitoraggio centralizzata per l'analisi delle tendenze.
8.6.4.3 Bilanciamento del monitoraggio proattivo con le prestazioni
Gli eventi estesi offrono un rilevamento dei danneggiamenti con un overhead ridotto rispetto alla frequente esecuzione di DBCC CHECKDB:
- Esegui eventi estesi in modo continuo per il rilevamento di danneggiamenti in tempo reale
- Eseguire DBCC CHECKDB solo quando compaiono indicatori di danneggiamento
- Pianifica DBCC CHECKDB regolarmente durante le finestre di manutenzione
- Utilizzare gli eventi estesi per identificare quali database richiedono attenzione immediata
Questo approccio garantisce un monitoraggio proattivo senza il notevole consumo di risorse tipico dei controlli di integrità costanti.
8.6.4.4 Riparare il database danneggiato
Se vengono rilevati danneggiamenti nel database, è possibile utilizzare DBCC CHECKDB per correggere i danneggiamenti minori. In caso di fallimento, è possibile provare un programma di terze parti. Strumento di recupero del database SQL, che generalmente offre un tasso di recupero più elevato su database gravemente danneggiati.
9. Eventi estesi con ambito server vs. con ambito database
9.1 Sessioni di eventi con ambito server
Le sessioni con ambito server monitorano l'attività nell'intero SQL Server istanza. Queste sessioni vengono create con la clausola ON SERVER e persistono nel database master.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Le sessioni con ambito server acquisiscono eventi da tutti i database e sono adatte al monitoraggio a livello di istanza.
9.2 Sessioni di eventi con ambito database (database SQL di Azure)
Le sessioni con ambito database sono limitate a un singolo database e vengono utilizzate principalmente in Azure SQL Database, dove l'accesso a livello di server è limitato:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
Nel database SQL di Azure, i file degli eventi vengono archiviati in Azure Blob Storage anziché nei file system locali.
9.3 Differenze e casi d'uso
Le sessioni con ambito server offrono un monitoraggio completo su tutti i database, ma richiedono autorizzazioni elevate. Le sessioni con ambito database offrono isolamento e sono adatte per il monitoraggio di applicazioni o tenant specifici.
Utilizza sessioni con ambito server per il monitoraggio centralizzato, la risoluzione dei problemi di prestazioni tra database e il controllo della sicurezza. Utilizza sessioni con ambito database in database SQL di Azure, ambienti multi-tenant o quando deleghi le responsabilità di monitoraggio ai team applicativi.
10. Eventi estesi nel database SQL di Azure
10.1 Considerazioni specifiche di Azure
Il database SQL di Azure implementa gli eventi estesi con alcune differenze rispetto alla versione locale SQL ServerPer impostazione predefinita, le sessioni sono limitate al database e l'archiviazione dei file degli eventi utilizza Azure Blob Storage anziché i file system locali.
L'autenticazione ad Azure Blob Storage richiede un token SAS configurato nella destinazione del file evento. Le stringhe di connessione fanno riferimento all'account di archiviazione e al contenitore in cui sono archiviati i file evento.
10.2 Destinazioni disponibili in Azure
Azure SQL Database supporta le seguenti destinazioni per gli eventi estesi:
- event_file: scrive in Azure Blob Storage
- ring_buffer: archiviazione basata sulla memoria con lo stesso comportamento di quella locale
- event_counter: conta le occorrenze degli eventi
La destinazione event_file richiede la configurazione con le credenziali di Archiviazione BLOB di Azure:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Creazione di sessioni con ambito database
Creare una sessione nel database SQL di Azure:
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;
Le sessioni con ambito database in Azure si comportano in modo simile alle sessioni con ambito server in locale, ma con ambito limitato al database corrente.
11. Migliori pratiche e ottimizzazione delle prestazioni
11.1 Riduzione dell'impatto sulle prestazioni
Gli eventi estesi sono progettati per un overhead minimo, ma una configurazione non corretta può influire sulle prestazioni. Seguire queste linee guida:
- Utilizzare predicati specifici per filtrare gli eventi anziché catturare tutto
- Evitare di raccogliere azioni non necessarie che aggiungono sovraccarico di elaborazione
- Scegliere gli obiettivi appropriati in base alle esigenze di conservazione dei dati
- Imposta dimensioni ragionevoli del buffer e latenze di invio
- Monitorare il consumo di risorse della sessione utilizzando DMV
11.2 Scelta degli eventi e dei filtri giusti
Seleziona eventi che rispondano direttamente ai tuoi obiettivi di monitoraggio. Evita eventi ad alta frequenza, a meno che non siano necessari, e applica sempre predicati per ridurre il volume di dati.
Ad esempio, invece di catturare tutti gli eventi sql_statement_completed, filtrare per database specifici o soglie di durata:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Linee guida per la selezione degli obiettivi
Scegli gli obiettivi in base ai requisiti della tua analisi:
- Utilizzare event_file per un'analisi storica dettagliata e una conservazione a lungo termine
- Utilizzare ring_buffer per il monitoraggio in tempo reale con un impatto I/O minimo
- Utilizzare event_counter quando conta solo la frequenza
- Utilizzare l'istogramma per l'analisi della distribuzione
- Utilizzare pair_matching per l'analisi degli eventi correlati
11.4 Raccomandazioni sulla configurazione della sessione
Configurare le sessioni con limiti di risorse appropriati:
- Imposta MAX_MEMORY in base al volume di eventi previsto e alle risorse del server
- Utilizzare ALLOW_SINGLE_EVENT_LOSS per ridurre al minimo il sovraccarico nella maggior parte degli scenari.
- Imposta MAX_DISPATCH_LATENCY per bilanciare le esigenze in tempo reale con le prestazioni
- Utilizzare il partizionamento della memoria PER_CPU sui sistemi multiprocessore
- Evitare di utilizzare STARTUP_STATE=ON a meno che non sia richiesto il monitoraggio continuo.
11.5 Gestione delle dimensioni e della conservazione dei file degli eventi
Configurare il rollover dei file per impedire l'utilizzo illimitato del disco:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Questa configurazione gestisce circa 1 GB di dati sugli eventi (10 file × 100 MB). Adattare in base ai requisiti di conservazione e allo spazio di archiviazione disponibile.
12. Risoluzione dei problemi relativi agli eventi estesi
12.1 Problemi comuni e soluzioni
I problemi più comuni relativi agli Extended Events includono sessioni che non acquisiscono dati, degrado delle prestazioni, problemi con i file di destinazione e comportamenti imprevisti delle sessioni.
12.2 La sessione non acquisisce dati
Se una sessione non cattura gli eventi previsti:
- Verificare che la sessione sia stata avviata utilizzando sys.dm_xe_sessions.
- Controllare i predicati per assicurarsi che non filtrino tutti gli eventi.
- Verifica che gli eventi vengano attivati rimuovendo temporaneamente i filtri.
- Rivedi le autorizzazioni per assicurarti di avere accesso alla visualizzazione dei dati della sessione.
- Verificare che la configurazione di destinazione sia corretta e scrivibile.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Degrado delle prestazioni
Se gli eventi estesi causano problemi di prestazioni:
- Aggiungere predicati per ridurre il volume degli eventi.
- Rimuovi le azioni non necessarie che raccolgono dati supplementari.
- Aumentare MAX_DISPATCH_LATENCY per ridurre la frequenza di scrittura.
- Cambiare EVENT_RETENTION_MODE in ALLOW_SINGLE_EVENT_LOSS.
- Per gli eventi ad alta frequenza, si consiglia di utilizzare ring_buffer anziché event_file.
12.4 Problemi relativi alla destinazione dei file
I problemi relativi ai file di destinazione sono spesso legati alle autorizzazioni o allo spazio su disco:
- Verifica il file SQL Server L'account di servizio dispone dei permessi di scrittura per la directory di destinazione.
- Assicurarsi che sia disponibile spazio sufficiente sul disco.
- Verificare che il percorso specificato esista e sia accessibile.
- Controllare la configurazione del rollover dei file se il rollover non avviene come previsto.
12.5 Debug con viste di sistema
Utilizzare i DMV per diagnosticare i problemi relativi agli eventi estesi:
-- 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. Argomenti avanzati
13.1 Creazione di pacchetti di eventi personalizzati
Gli utenti avanzati possono creare pacchetti di eventi personalizzati per estendere SQL Server Funzionalità di eventi estesi. Ciò richiede lo sviluppo in C++ e l'integrazione con SQL Server framework di estensibilità.
I pacchetti personalizzati consentono il monitoraggio di eventi specifici dell'applicazione o l'integrazione di sistemi di monitoraggio di terze parti con l'infrastruttura Extended Events.
13.2 Modelli di sessione di eventi
SSMS fornisce modelli integrati per scenari di monitoraggio comuni. È possibile accedere ai modelli durante la creazione di nuove sessioni tramite la procedura guidata:
- Nella finestra di dialogo Nuova sessione, fare clic su Modello cadere in picchiata.
- Seleziona tra i modelli disponibili, come Monitoraggio dei dettagli delle query o Integrità del sistema.
- Modifica il modello in base alle tue esigenze specifiche.
13.3 Integrazione con soluzioni di monitoraggio
I dati degli eventi estesi possono alimentare soluzioni di monitoraggio aziendale:
- Esportare i dati degli eventi nei sistemi di registrazione centralizzati
- Analizza i file degli eventi e carica i dati nei database di monitoraggio
- Crea dashboard personalizzate utilizzando strumenti BI
- Attiva avvisi in base a modelli di eventi specifici
- correlare SQL Server eventi con metriche applicative e infrastrutturali
13.4 Automazione e programmazione
Automatizza la gestione degli eventi estesi utilizzando SQL Server Agente:
- Crea attività per avviare/interrompere le sessioni durante finestre temporali specifiche.
- Pianifica l'analisi e la segnalazione dei file degli eventi
- Implementare politiche di conservazione dei dati archiviando o eliminando i vecchi file di eventi
- Automatizza la risposta alle condizioni rilevate, come problemi di prestazioni o eventi di sicurezza
14. Migrazione da SQL Server Profiler
14.1 SQL Server Eventi del profiler per la mappatura degli eventi estesi
Microsoft fornisce la mappatura tra SQL Server Profiler eventi ed eventi estesi. Le mappature comuni includono:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:BatchStarting -> sql_batch_starting
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- Grafico di deadlock -> xml_deadlock_report
- Accesso audit -> accedi
- Verifica Disconnessione -> Disconnetti
14.2 Conversione delle definizioni di traccia
Convertire esistente SQL Server Il profiler traccia le sessioni di eventi estesi identificando gli eventi equivalenti e configurando i predicati appropriati. SSMS fornisce assistenza per le conversioni più comuni.
Esaminare i filtri di traccia e convertirli in predicati di eventi estesi. Le azioni in eventi estesi sostituiscono le colonne di traccia da SQL Server Profilatore.
14.3 Confronto delle prestazioni
Gli eventi estesi forniscono prestazioni significativamente migliori rispetto a SQL Server Profiler. Gli studi di benchmark dimostrano che gli eventi estesi consumano meno cicli di CPU e hanno un impatto minore sulla produttività delle transazioni.
Gli eventi estesi utilizzano l'elaborazione asincrona e la gestione ottimizzata della memoria, mentre SQL Server Profiler si basa sull'acquisizione sincrona degli eventi che si blocca fino al completamento dell'elaborazione della traccia.
15. CONCLUSIONE
15.1 Riepilogo dei concetti chiave
SQL Server Extended Events fornisce un framework potente e leggero per il monitoraggio e la risoluzione dei problemi SQL ServerL'architettura è composta da eventi, azioni, predicati, destinazioni e sessioni che lavorano insieme per acquisire l'attività rilevante del server.
Le sessioni possono essere create utilizzando SSMS o T-SQL, offrendo flessibilità sia per la risoluzione dei problemi ad hoc che per il monitoraggio automatizzato. Diversi tipi di destinazione supportano differenti approcci di analisi, dal monitoraggio in tempo reale con ring_buffer all'analisi storica con event_file.
Gli eventi estesi offrono prestazioni superiori rispetto a SQL Server Profiler, offrendo al contempo funzionalità di monitoraggio più complete. Il sistema consente agli amministratori di database e agli sviluppatori di diagnosticare problemi, ottimizzare le prestazioni, migliorare la sicurezza e mantenere la conformità.
15.2 Prossimi passi e ulteriori risorse
Per continuare a sviluppare il tuo SQL Server Competenza XEvents:
- Implementare eventi estesi in ambienti di test per acquisire esperienza pratica
- Consultare la documentazione Microsoft per cataloghi di eventi completi e riferimenti dettagliati alla sintassi
- Forum SQL Server forum della comunità per imparare dalle esperienze degli altri
- Esplora scenari avanzati come pacchetti personalizzati e integrazione con piattaforme di monitoraggio
- Sviluppare una libreria di modelli di sessione per scenari di monitoraggio comuni
16 Sezione FAQ
D: Cosa sono SQL Server Eventi prolungati?
A: SQL Server Extended Events è un sistema di monitoraggio delle prestazioni leggero integrato nel SQL Server Motore di database che acquisisce informazioni dettagliate sulle operazioni del server con un overhead minimo.
D: In che cosa differiscono gli eventi estesi da SQL Server Profilatore?
A: Gli eventi estesi offrono prestazioni migliori, un overhead inferiore e una configurazione più flessibile rispetto a SQL Server Profilatore. SQL Server Profiler è obsoleto e Microsoft consiglia di utilizzare Eventi estesi per tutte le attività di monitoraggio.
D: Gli eventi estesi possono avere un impatto SQL Server prestazione?
R: Se correttamente configurati con predicati e limiti di risorse appropriati, gli eventi estesi hanno un impatto minimo sulle prestazioni. Una configurazione inadeguata senza filtri può influire sulle prestazioni.
D: Quali autorizzazioni sono necessarie per creare sessioni di eventi estesi?
R: È necessaria l'autorizzazione ALTER ANY EVENT SESSION per le sessioni con ambito server oppure l'autorizzazione CONTROL sul database per le sessioni con ambito database.
D: Come posso visualizzare i dati degli Eventi estesi?
A: Usa SQL Server Il visualizzatore di dati in tempo reale di Management Studio consente di interrogare i file di eventi con sys.fn_xe_file_target_read_file oppure di interrogare i dati del buffer circolare tramite le DMV.
D: Gli eventi estesi possono rilevare il danneggiamento del database?
R: Sì, gli eventi estesi possono catturare errori correlati alla corruzione (823, 824, 825) ed eventi di pagina sospetti, fornendo un avviso tempestivo per potenziali problemi di corruzione.
D: Qual è la differenza tra eventi, azioni e predicati?
A: Gli eventi sono accadimenti che si desidera monitorare. Le azioni aggiungono informazioni supplementari agli eventi acquisiti. I predicati filtrano gli eventi in base a determinate condizioni per ridurre il volume dei dati.
D: Come posso monitorare le query provenienti da applicazioni o database specifici?
A: Utilizza i predicati nella configurazione dell'evento per filtrare in base a database_name, client_app_name o altri campi pertinenti.
D: Quali target devo utilizzare per gli eventi estesi?
A: Utilizzare event_file per l'archiviazione persistente e l'analisi storica, ring_buffer per il monitoraggio in tempo reale con basso overhead, event_counter per il semplice monitoraggio della frequenza e histogram per l'analisi della distribuzione.
D: Gli eventi estesi sono disponibili nel database SQL di Azure?
R: Sì, il database SQL di Azure supporta eventi estesi con ambito database con file di eventi archiviati in Azure Blob Storage.
D: Come posso risolvere i problemi di una sessione di Eventi estesi che non acquisisce dati?
A: Verificare che la sessione sia avviata, controllare che i predicati non filtrino tutti gli eventi, confermare la configurazione di destinazione e rivedere le autorizzazioni utilizzando le DMV di sistema.
D: Posso automatizzare la gestione degli eventi estesi?
A: Sì, usa SQL Server Le attività dell'agente consistono nell'avviare/interrompere le sessioni, analizzare i file degli eventi, implementare le politiche di conservazione e rispondere alle condizioni rilevate.
Referenze
- Avvio rapido: eventi estesi in SQL Server – Microsoft Learn
- Panoramica degli eventi estesi – Microsoft Learn
- SQL Server Sessioni di eventi estesi – Microsoft Learn
- Obiettivi per eventi estesi in SQL Server – Microsoft Learn
- SQL Server Motore di eventi esteso – Microsoft Learn
- SQL Server Profiler: Guida completa
- DBCC CHECKDB: Guida completa
- DataNumen SQL Recovery
L'autore
Yuan Sheng è un amministratore di database senior (DBA) con oltre 10 anni di esperienza in SQL Server ambienti e gestione di database aziendali. Ha risolto con successo centinaia di scenari di ripristino di database in aziende di servizi finanziari, sanitari e manifatturiere.
Yuan è specializzato in SQL Server recupero del database, soluzioni ad alta disponibilitàe ottimizzazione delle prestazioni. La sua vasta esperienza pratica include la gestione di database multi-terabyte, l'implementazione Gruppi di disponibilità sempre attivie sviluppo di strategie automatizzate di backup e ripristino per sistemi aziendali critici.
Grazie alla sua competenza tecnica e al suo approccio pratico, Yuan si concentra sulla creazione di guide complete che aiutano gli amministratori di database e i professionisti IT a risolvere problemi complessi SQL Server sfide in modo efficiente. Si mantiene aggiornato con le ultime SQL Server versioni e le tecnologie di database in continua evoluzione di Microsoft, testando regolarmente gli scenari di ripristino per garantire che le sue raccomandazioni riflettano le migliori pratiche del mondo reale.
Hai domande su SQL Server recupero o hai bisogno di ulteriore assistenza per la risoluzione dei problemi del database? Yuan accoglie feedback e suggerimenti per migliorare queste risorse tecniche.

















