Pacchetti degli Eventi estesi

Si applica a: SQL Server, Database SQL di Azure e Istanza gestita di SQL di Azure

Un pacchetto è un contenitore per oggetti Eventi estesi nel motore di database di SQL Server. Ad esempio, i seguenti pacchetti esistono in qualsiasi motore di database che supporta gli eventi estesi:

Pacchetto Descrizione
package0 (predefinito) Oggetti di sistema Eventi estesi.
sqlserver Oggetti correlati al motore di database.
sqlos Oggetti correlati al sistema operativo di SQL (SQLOS).

Nota

Il pacchetto SecAudit viene usato internamente dalla funzionalità di controllo. Nessuno degli oggetti in questo pacchetto è disponibile tramite DDL (Data Definition Language) di eventi estesi.

I pacchetti sono identificati da un nome, da un GUID e dal modulo binario che contiene il pacchetto. Un modulo può essere un file eseguibile o una libreria a collegamento dinamico (DLL). Per altre informazioni, vedere sys.dm_xe_packages.

Un pacchetto può contenere alcuni o tutti gli oggetti seguenti, che vengono discussi in maggior dettaglio più avanti in questo articolo:

  • Eventi
  • Target
  • Azioni
  • Tipi
  • Predicati
  • Mappe

Oggetti da pacchetti diversi possono essere combinati in una sessione dell'evento. Per altre informazioni, vedere Sessioni di Eventi estesi.

Contenuto del pacchetto

La figura seguente illustra gli oggetti che possono esistere in un pacchetto.

Diagramma che mostra la relazione tra un modulo, pacchetti e oggetti.

Eventi

Gli eventi monitorano i punti di interesse nel percorso di esecuzione di un programma, ad esempio SQL Server. Quando viene generato un evento, contiene il fatto che il punto di interesse è stato raggiunto e fornisce informazioni sullo stato derivanti dall'ora in cui l'evento è stato generato.

Gli eventi possono essere utilizzati solamente per scopi di traccia o per azioni di trigger. Queste azioni possono essere sincrone o asincrone.

Nota

Un evento non ha alcuna conoscenza delle azioni che possono essere lanciate in risposta all'attivazione di eventi.

Un set di eventi in un pacchetto non può essere modificato dopo che il pacchetto viene registrato con gli eventi estesi.

A tutti gli eventi è associato uno schema con versione che ne definisce il contenuto. Questo schema è costituito da colonne di evento con tipi definiti. Un evento di un tipo specifico deve sempre fornire i propri dati nell'ordine esatto specificato nello schema. Una destinazione dell'evento non deve tuttavia utilizzare tutti i dati forniti.

Categorizzazione dell'evento

Negli eventi estesi viene utilizzato un modello di categorizzazione dell'evento simile a Analisi eventi per Windows (ETW). Due proprietà dell'evento sono utilizzate per categorizzazione, canale e parola chiave. L'utilizzo di queste proprietà supporta l'integrazione degli eventi estesi con ETW e i suoi strumenti.

Un canale identifica il pubblico per un evento. I canali sono descritti nella tabella seguente.

Termine Definizione
Amministratore Gli eventi amministrativi sono indirizzati principalmente agli utenti finali, agli 'amministratori e al supporto. Gli eventi trovati nei canali amministrativi possono indicare un problema con una soluzione ben definita sul quale può agire un amministratore. Un esempio di evento amministrativo è quando un'applicazione non riesce a connettersi. Questi eventi sono documentati oppure hanno un messaggio ad essi associato che comunica a chi legge che cosa fare per risolvere il problema.
Canale operativo Gli eventi operativi sono utilizzati per l'analisi e la diagnostica di un problema o di un'occorrenza. Possono essere utilizzati per attivare strumenti o attività basate su un problema o un'occorrenza.
Analitiche Gli eventi analitici sono pubblicati in volumi elevati. Descrivono il funzionamento del programma e sono in genere utilizzati nell'analisi delle prestazioni.
Debug Gli eventi di debug sono utilizzati principalmente dagli sviluppatori per diagnosticare un problema nelle operazioni di debug.

Gli eventi nel canale di debug restituiscono dati interni, specifici dell'implementazione, relativi allo stato. Gli schemi e i dati restituiti dagli eventi possono cambiare, non essere più validi o venire rimossi nelle versioni future del motore di database SQL Server senza avviso.

Una parola chiave è specifica dell'applicazione e abilita un raggruppamento più preciso di eventi correlati, ciò rende più facile specificare e recuperare un evento che si desidera utilizzare in una sessione. È possibile utilizzare la seguente query ottenere informazioni sulla parola chiave:

SELECT map_value AS Keyword
FROM sys.dm_xe_map_values
WHERE name = 'keyword_map';

Target

Le destinazioni sono consumer di eventi. Le destinazioni elaborano gli eventi, in modo sincrono nel thread che genera l'evento o in modo asincrono in un thread fornito dal sistema. Gli eventi estesi forniscono diversi tipi di destinazione che è possibile utilizzare in base alle proprie esigenze per indirizzare l'output dell'evento. Per ulteriori informazioni, vedere Destinazioni per gli Eventi estesi.

La clausola ADD TARGET consente di aggiungere destinazioni a una sessione eventi.

Azioni

Un'azione è una risposta o una serie di risposte a un evento a livello di programmazione. Le azioni sono associate a un evento e a ogni evento può essere associato il proprio set di azioni.

Nota

Le azioni destinate a un specifico evento non possono essere associate ad altri eventi.

Un'azione associata a un evento viene richiamata in modo sincrono sul thread che ha attivato l'evento. Vi sono molti tipi di azioni e hanno un'ampia gamma di funzionalità. Le azioni possono:

  • Acquisire un backup del processo
  • Archiviare informazioni sullo stato in un contesto locale utilizzando l'archiviazione variabile
  • Aggregare dati dell'evento
  • Accodare dati ai dati dell'evento

Alcuni esempi di utilizzo delle azioni sono:

  • Raccogliere il testo SQL di una query eseguita dalla conversazione che genera l'evento
  • Raccogliere l'handle del piano di query, l'hash della query e l'hash del piano di query
  • Raccogliere gli attributi di una sessione che causa la generazione dell'evento, tra cui nome host client, nome dell'entità di sicurezza, ID connessione e così via.
  • Raccoglie lo stack di chiamate
  • Acquisire un backup di processo quando si verifica un errore specifico

La clausola ACTION consente di aggiungere azioni a una sessione eventi.

Predicati

I predicati rappresentano un set di regole logiche utilizzate per valutare gli eventi quando vengono elaborati. I predicati consentono all'utente degli eventi estesi di acquisire selettivamente i dati dell'evento in base a criteri specifici.

I predicati possono archiviare i dati in un contesto locale che può essere usato per creare predicati che restituiscono True ogni n minuti o ogni n volte che un evento viene generato. È possibile usare questa archiviazione del contesto locale anche per aggiornare dinamicamente il predicato, sopprimendo con ciò le generazioni future dell'evento se l'evento contiene dati simili.

I predicati hanno la possibilità di recuperare informazioni sul contesto, ad esempio l'ID del thread, così come dati specifici sull'evento. I predicati sono valutati come espressioni booleane complete e supportano operazioni di corto circuito nel primo punto dove viene individuato che l'intera l'espressione è falsa.

Nota

I predicati con effetti collaterali potrebbero non essere valutati se una precedente verifica del predicato non riesce.

La clausola WHERE consente di aggiungere predicati a una sessione eventi.

Tipi

In un pacchetto ogni oggetto Eventi estesi ha un tipo. Di seguito sono elencati i tipi usati:

  • action
  • event
  • message
  • pred_compare
  • pred_source
  • target
  • type

Per altre informazioni, vedere sys.dm_xe_objects.

Mappe

Una tabella della mappa esegue il mapping di un valore interno a una stringa e ciò consente a un utente di conoscere ciò che rappresenta il valore. Anziché essere in grado di ottenere solo un valore numerico, un utente può ottenere una descrizione significativa del valore interno. Nella query seguente si illustra come ottenere valori della mappa.

SELECT map_key,
       map_value
FROM sys.dm_xe_map_values
WHERE name = 'lock_mode';

La query precedente produce l'output seguente:

map_key map_value
0 NL
1 SCH_S
2 SCH_M
3 S
4 U
5 X
6 IS
7 IU
8 IX
9 SIU
10 SIX
11 UIX
12 BU
13 RS_S
14 RS_U
15 RI_NL
16 RI_S
17 RI_U
18 RI_X
19 RX_S
20 RX_U
21 LAST_MODE

Utilizzare tabella come esempio, supponendo di avere una lock_mode di colonna denominata il cui valore è 5. La tabella indica che è stato eseguito il mapping di 5 aXX, ovvero il tipo di blocco è Esclusivo.