Condividi ora:
Sommario nascondere
8. Casi d'uso pratici ed esempi

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:

  1. Apri SQL Server Management Studio e connettiti al tuo SQL Server esempio.
  2. In Esplora oggetti, espandere Management -> Eventi estesi.
  3. Il nodo Eventi estesi contiene Sessioni and personalizzati cartelle per la gestione delle configurazioni di monitoraggio.

Accedi all'interfaccia Eventi estesi in SQL Server Studio di gestione.

4.3 Creare una nuova sessione

Per creare una nuova sessione:

    1. Fare clic con il tasto destro del mouse su Sessioni cartella sotto Eventi estesi.
    2. Seleziona Nuova sessione per aprire la finestra di dialogo di configurazione. Il contenuto seguente utilizzerà questo metodo per creare una nuova sessione.

Crea una nuova sessione di eventi estesi in SQL Server Studio di gestione.

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:

  1. Inserisci un nome di sessione nel Nome della sessione campo. Utilizzare nomi descrittivi che indichino lo scopo del monitoraggio.
  2. Seleziona facoltativamente Avviare la sessione dell'evento all'avvio del server. per abilitare l'attivazione automatica della sessione.
  3. Il modello di sessione predefinito è luminosoÈ possibile utilizzare altri modelli se si utilizza una configurazione predefinita.

Pagina generale della sessione Eventi estesi in SQL Server Studio di gestione.

4.3.2 Impostazione della pagina Eventi

Migliori Eventi La pagina consente di selezionare quali eventi monitorare:

  1. Seleziona il Eventi pagina da sinistra Seleziona una pagina pannello.
  2. Nel Archivio eventi, sfoglia gli eventi disponibili o usa la funzione di ricerca.
  3. Filtra gli eventi digitando parole chiave come "sql_statement_completed" per trovare gli eventi pertinenti.
  4. Selezionare l'evento desiderato, ad esempio sql_statement_completed.
  5. Fare clic sul pulsante freccia destra per spostare l'evento nella Eventi selezionati elenco.

Pagina Eventi della sessione Eventi estesi in SQL Server Studio di gestione.

4.3.3 Configurazione dell'archiviazione dei dati

Migliori Archiviazione dei dati   la pagina definisce dove vengono archiviati i dati dell'evento:

  1. Seleziona il Archiviazione dei dati   pagina da sinistra Seleziona una pagina pannello.
  2. Nel Obiettivi area, scegli un tipo di destinazione dal menu a tendina.

Pagina di archiviazione dati della sessione Eventi estesi in SQL Server Studio di gestione.

(1) target del file evento

Il target event_file memorizza i dati in file su disco con estensione .xel:

  1. Seleziona file_evento dal menu a tendina del tipo di destinazione.
  2. Specifica il percorso del file, ad esempio C:\temp\YourSession_Target.xel.
  3. Configura le opzioni di rollover per gestire lo spazio su disco impostando la dimensione massima dei file e il numero massimo di file.
  4. Il dispositivo di destinazione scrive continuamente gli eventi fino all'interruzione della sessione o al raggiungimento dei limiti di memoria.

Imposta la destinazione della sessione su event_file in SSMS

(2) Target ring_buffer

Il target ring_buffer memorizza gli eventi in memoria per un accesso rapido senza I/O su disco:

  1. Seleziona buffer ad anello come tipo di destinazione.
  2. Configurare l'allocazione massima di memoria per il buffer.
  3. Tieni presente che gli eventi più vecchi vengono eliminati quando il buffer si riempie, rendendolo adatto al monitoraggio delle attività recenti.

Imposta la destinazione su ring_buffer per la sessione Extended Events in SQL Server Studio di gestione.

(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.

Imposta il target su event_counter per la sessione Eventi estesi in SQL Server Studio di gestione.

(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.

Imposta l'obiettivo sull'istogramma per la sessione Eventi estesi in SQL Server Studio di gestione.

(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.

Imposta la destinazione della sessione su pair_matching in SSMS

4.3.4 Impostazioni avanzate

Migliori Filtri La pagina fornisce opzioni di configurazione a livello di sessione:

  1. Seleziona il Filtri pagina da sinistra Seleziona una pagina pannello.
  2. Configurazione Modalità di conservazione degli eventi per controllare come vengono gestiti gli eventi sotto pressione di memoria.
  3. Impostato Latenza massima di invio per bilanciare l'elaborazione in tempo reale con le prestazioni del sistema.
  4. Configurazione Dimensione massima della memoria and Dimensione massima dell'evento in base alle tue esigenze di monitoraggio.
  5. Seleziona Modalità di partizione della memoria per ottimizzare ambienti con una o più CPU.

Pagina avanzata della sessione in SQL Server Studio di gestione.

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:

  1. Sulla Eventi pagina, seleziona l'evento che vuoi filtrare, ad esempio "sql_statement_completed".
  2. Clicchi Configurazione per aprire la finestra di dialogo di configurazione dell'evento.
    Configurare l'evento di una sessione di Eventi estesi in SQL Server Studio di gestione.
  3. Seleziona il Filtro (predicato) scheda.
  4. Nel Settore menu a discesa, seleziona il campo su cui filtrare, ad esempio la durata.
  5. Seleziona un Operatore, come “>”.
  6. Inserisci il filtro Valore, ad esempio 1000000 (1 secondo).
  7. Se necessario, aggiungere altre condizioni.

Configurare i filtri (predicati) per un evento.

4.5 Selezione di azioni e campi evento

Per ogni evento è possibile selezionare i dati da raccogliere:

  1. Sulla Eventi pagina, seleziona l'evento da cui vuoi selezionare i dati, ad esempio "sql_statement_completed".
  2. Clicchi Configurazione per aprire la finestra di dialogo di configurazione dell'evento.
  3. Seleziona il Campi globali (azioni) scheda.
  4. Seleziona le azioni per aggiungere informazioni supplementari, come nome_database o nome_applicazione_client.
    Configura le azioni di un evento.
  5. Consulta gli Campi evento sezione per vedere quali campi vengono acquisiti automaticamente.
  6. Cancellare tutti i campi non necessari per ridurre il volume dei dati.
    Configura i campi di un evento.

4.6 Avvio e gestione delle sessioni

Dopo aver configurato la sessione, è possibile avviarla e monitorarne il funzionamento:

  1. Clicchi OK per creare la sessione.
  2. In Esplora oggetti, espandere Sessioni cartella per visualizzare la nuova sessione.
  3. Fare clic con il pulsante destro del mouse sul nome della sessione e selezionare Inizia la sessione per iniziare a catturare gli eventi.
    Avvia una sessione di eventi estesi in SQL Server Studio di gestione.
  4. Per visualizzare i dati in tempo reale, fare clic con il pulsante destro del mouse sulla sessione e selezionare Guarda i dati in diretta.
    Guarda i dati in tempo reale di una sessione di Eventi estesi in SQL Server Studio di gestione.
  5. 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:

  1. In Esplora oggetti, espandere Management -> Eventi estesi -> Sessioni.
  2. Fai clic con il pulsante destro del mouse sulla sessione attiva.
  3. Seleziona Guarda i dati in diretta per aprire il visualizzatore di dati in tempo reale.
    Guarda i dati in tempo reale di una sessione di Eventi estesi in SQL Server Studio di gestione.
  4. Gli eventi vengono visualizzati nella griglia man mano che si verificano.
  5. Fare clic sui singoli eventi per visualizzare i valori dettagliati dei campi nel riquadro dei dettagli.
    Guarda i dati in tempo reale degli eventi, compresi i dettagli dell'evento.
  6. 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:

  1. Configurazione SQL Server Lavoro dell'agente per interrogare periodicamente il file degli eventi di monitoraggio della corruzione.
  2. Quando vengono rilevati eventi di danneggiamento, eseguire DBCC CHECKDB sul database interessato.
  3. Invia avvisi via email agli amministratori di database con i dettagli dell'evento e i risultati di DBCC CHECKDB.
  4. 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:

  1. Verificare che la sessione sia stata avviata utilizzando sys.dm_xe_sessions.
  2. Controllare i predicati per assicurarsi che non filtrino tutti gli eventi.
  3. Verifica che gli eventi vengano attivati ​​rimuovendo temporaneamente i filtri.
  4. Rivedi le autorizzazioni per assicurarti di avere accesso alla visualizzazione dei dati della sessione.
  5. 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:

  1. Aggiungere predicati per ridurre il volume degli eventi.
  2. Rimuovi le azioni non necessarie che raccolgono dati supplementari.
  3. Aumentare MAX_DISPATCH_LATENCY per ridurre la frequenza di scrittura.
  4. Cambiare EVENT_RETENTION_MODE in ALLOW_SINGLE_EVENT_LOSS.
  5. 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:

  1. Verifica il file SQL Server L'account di servizio dispone dei permessi di scrittura per la directory di destinazione.
  2. Assicurarsi che sia disponibile spazio sufficiente sul disco.
  3. Verificare che il percorso specificato esista e sia accessibile.
  4. 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:

  1. Nella finestra di dialogo Nuova sessione, fare clic su Modello cadere in picchiata.
  2. Seleziona tra i modelli disponibili, come Monitoraggio dei dettagli delle query o Integrità del sistema.
  3. 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


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.

Condividi ora: