Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureDatabase SQL in Microsoft Fabric
Crea una sessione eventi estesi che identifica gli eventi da raccogliere, le destinazioni della sessione eventi e le opzioni della sessione eventi.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
<event_definition> [ , ...n ]
[ <event_target_definition> [ , ...n ] ]
[ WITH ( <event_session_options> [ , ...n ] ) ]
}
;
<event_definition>::=
{
ADD EVENT [event_module_guid].event_package_name.event_name
[ ( {
[ SET { event_customizable_attribute = <value> [ , ...n ] } ]
[ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
[ WHERE <predicate_expression> ]
} ) ]
}
<predicate_expression> ::=
{
[ NOT ] <predicate_factor> | { ( <predicate_expression> ) }
[ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ]
[ , ...n ]
}
<predicate_factor>::=
{
<predicate_leaf> | ( <predicate_expression> )
}
<predicate_leaf>::=
{
<predicate_source_declaration> { = | < > | != | > | >= | < | <= } <value>
| [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration> , <value> )
}
<predicate_source_declaration>::=
{
event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}
<value>::=
{
number | 'string'
}
<event_target_definition>::=
{
ADD TARGET [event_module_guid].event_package_name.target_name
[ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
}
<event_session_options>::=
{
[ MAX_MEMORY = size [ KB | MB ] ]
[ [ , ] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
[ [ , ] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
[ [ , ] MAX_EVENT_SIZE = size [ KB | MB ] ]
[ [ , ] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
[ [ , ] TRACK_CAUSALITY = { ON | OFF } ]
[ [ , ] STARTUP_STATE = { ON | OFF } ]
[ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}
Argomenti
event_session_name
Nome definito dall'utente per la sessione eventi. event_session_name è alfanumerico, può avere un massimo di 128 caratteri, deve essere univoco all'interno di un'istanza di SQL Server e deve essere conforme alle regole per gli identificatori di database.
ON { SERVER | DATABASE }
Determina se la sessione eventi si trova nel contesto del server o del database.
Azure SQL Database e SQL database in Microsoft Fabric richiedono DATABASE.
ADD EVENT [event_module_guid]. event_package_name. event_name
Evento da associare alla sessione eventi, dove:
- event_module_guid è l'identificatore univoco globale (GUID) del modulo contenente l'evento.
- event_package_name è il pacchetto che contiene l'evento.
- event_name è il nome dell'evento.
Per trovare gli eventi disponibili, eseguire la query seguente:
SELECT o.name AS event_name,
o.description AS event_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;
SET { event_customizable_attribute = <value> [ ,... n ] }
Attributi personalizzabili per l'evento.
Gli attributi personalizzabili per un determinato evento sono disponibili eseguendo la query seguente:
SELECT object_name,
name AS column_name,
type_name,
column_value,
description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
AND column_type = 'customizable'
ORDER BY column_name ASC;
ACTION ( { [event_module_guid].event_package_name. action_name [ ,... n ] })
Azione da associare all'evento, dove:
- event_module_guid è il GUID del modulo che contiene l'azione.
- event_package_name è il pacchetto che contiene l'azione.
- action_name è il nome dell'azione.
Le azioni disponibili sono disponibili eseguendo la query seguente:
SELECT o.name AS action_name,
o.description AS action_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;
DOVE <predicate_expression>
Indica l'espressione del predicato utilizzata per determinare se un evento deve essere elaborato. Se <predicate_expression> è true, l'evento viene elaborato ulteriormente dalle azioni e dalle destinazioni della sessione. Se <predicate_expression> è false, l'evento viene eliminato, evitando azioni aggiuntive e l'elaborazione di destinazione. Ogni espressione di predicato è limitata a 3.000 caratteri.
event_field_name
Nome del campo dell'evento che identifica l'origine del predicato.
I campi per un evento sono disponibili eseguendo la query seguente:
SELECT oc.name AS field_name,
oc.type_name AS field_type,
oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
AND
o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
AND
o.name = 'event-name-placeholder'
AND
oc.column_type = 'data'
ORDER BY field_name ASC;
[event_module_guid]. event_package_name. predicate_source_name
Nome dell'origine del predicato globale in cui:
- event_module_guid è l'identificatore univoco globale (GUID) del modulo contenente l'evento.
- event_package_name è il pacchetto che contiene l'oggetto di origine del predicato.
- predicate_source_name è il nome dell'origine del predicato.
È possibile trovare le origini del predicato eseguendo la query seguente:
SELECT o.name AS predicate_source_name,
o.description AS predicate_source_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;
[event_module_guid].event_package_name.predicate_compare_name
Nome dell'oggetto di confronto predicato, dove:
- event_module_guid è l'identificatore univoco globale (GUID) del modulo contenente l'evento.
- event_package_name è il pacchetto che contiene l'oggetto di confronto del predicato.
- predicate_compare_name è il nome del confronto predicato.
È possibile trovare i comparatori di predicati eseguendo la query seguente:
SELECT o.name AS predicate_comparator_name,
o.description AS predicate_comparator_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;
numero
Qualsiasi tipo numerico che può essere rappresentato come intero a 64 bit.
'string'
Stringa ANSI o Unicode come richiesto dal comparatore di predicati. Non viene eseguita alcuna conversione del tipo di stringa implicita per le funzioni del paragone del predicato. Il passaggio del valore di un tipo imprevisto genera un errore.
ADD TARGET [event_module_guid]. event_package_name. target_name
Destinazione da associare alla sessione dell'evento, dove:
- event_module_guid è il GUID del modulo che contiene la destinazione.
- event_package_name è il pacchetto che contiene la destinazione.
- target_name è il nome di destinazione.
È possibile trovare le destinazioni disponibili eseguendo la query seguente:
SELECT o.name AS target_name,
o.description AS target_description,
o.capabilities_desc,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;
Una sessione eventi può avere zero, una o più destinazioni. Tutte le destinazioni aggiunte a una sessione eventi devono essere diverse. Ad esempio, non è possibile aggiungere una seconda event_file destinazione a una sessione che ha già una event_file destinazione.
Per altre informazioni, inclusi gli esempi di utilizzo per le destinazioni di uso comune, vedere Destinazioni degli eventi estesi.
SET { target_parameter_name = <value> [ , ... n ] }
Imposta un parametro di destinazione.
Per visualizzare tutti i parametri di destinazione e le relative descrizioni, eseguire la query seguente, sostituendo target-name-placeholder con il nome di destinazione, ad esempio event_file, ring_bufferhistogram, e così via:
SELECT name AS target_parameter_name,
column_value AS default_value,
description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
AND object_name = 'target-name-placeholder';
Importante
Se si usa la destinazione del buffer circolare, è consigliabile impostare il MAX_MEMORY parametro di destinazione (distinto dal parametro di MAX_MEMORYsessione) su 1.024 kilobyte (KB) o meno per evitare il troncamento dei dati dell'output XML.
Per altre informazioni sui tipi di destinazione, vedere Destinazioni degli eventi estesi.
WITH ( <event_session_options> [ ,... n ] )
Specifica le opzioni da utilizzare con la sessione eventi.
MAX_MEMORY = dimensione [KB | MB ]
La quantità di memoria allocata alla sessione per la memorizzazione degli eventi nel buffer. Il valore predefinito è 4 MB. size è un numero intero e può essere espresso in kilobyte (KB) o megabyte (MB). La quantità massima non può superare 2 GB (2.048 MB). Tuttavia, l'uso di valori di memoria nell'intervallo GB non è consigliato.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }
Specifica la modalità di memorizzazione dell'evento da utilizzare per la gestione della perdita di eventi.
ALLOW_SINGLE_EVENT_LOSS
Un evento può essere perso dalla sessione. Un evento singolo viene eliminato solo quando tutti i buffer dell'evento sono pieni. La perdita di un singolo evento quando i buffer di eventi sono completi riduce al minimo l'impatto sulle prestazioni riducendo al minimo la perdita di dati nel flusso di eventi elaborato.
ALLOW_MULTIPLE_EVENT_LOSS
È possibile che vengano persi i buffer dell'evento pieni contenenti più eventi. Il numero di eventi persi dipende dalla dimensione della memoria allocata alla sessione, dalla partizione della memoria e dalla dimensione degli eventi nel buffer. Questa opzione in genere evita l'impatto sulle prestazioni sul server quando i buffer degli eventi vengono riempiti rapidamente, ma un numero elevato di eventi può essere perso dalla sessione.
NO_EVENT_LOSS
Non è consentita alcuna perdita di eventi. Questa opzione assicura che tutti gli eventi generati siano mantenuti. L'utilizzo di questa opzione forza tutte le attività che attivano eventi ad aspettare fino a che lo spazio è disponibile in un buffer degli eventi. L'uso di NO_EVENT_LOSS può causare problemi di prestazioni rilevabili mentre la sessione eventi è attiva. Le sessioni utente e le query potrebbero bloccarsi durante l'attesa dello scaricamento degli eventi dal buffer.
Nota
Per i target dei file di eventi in Azure SQL Database, SQL database in Microsoft Fabric e Azure SQL Managed Instance (con la policy di aggiornamentoSQL Server 2025 o Always-up-to-date), a partire da giugno 2024,
NO_EVENT_LOSSsi comporta allo stesso modo di .ALLOW_SINGLE_EVENT_LOSSSe si specificaNO_EVENT_LOSS, viene restituito un avviso con ID messaggio 25665, gravità 10 e messaggioThis target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead.e viene creata la sessione.Questa modifica evita timeout di connessione, ritardi di failover e altri problemi che possono ridurre la disponibilità del database quando
NO_EVENT_LOSSvengono usati con destinazioni file di eventi nell'archiviazione BLOB di Azure.NO_EVENT_LOSSè previsto per la rimozione come argomento supportatoEVENT_RETENTION_MODEin futuri aggiornamenti di Azure SQL Database, SQL database in Microsoft Fabric e Azure SQL Managed Instance. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
MAX_DISPATCH_LATENCY = { secondi SECONDI | INFINITE }
Specifica il tempo necessario all'esecuzione del buffer degli eventi nella memoria prima che vengano resi disponibili nelle destinazioni della sessione. Per impostazione predefinita, questo valore è impostato su 30 secondi.
Secondi
SECONDSTempo di attesa, espresso in secondi, prima che venga avviato lo scaricamento dei buffer alle destinazioni. seconds è un numero intero. Il valore di latenza minimo è 1 secondo. È tuttavia possibile utilizzare il valore 0 per specificare una latenza infinita.
INFINITO
Scarica i buffer nelle destinazioni solo quando i buffer sono pieni o alla chiusura della sessione dell'evento.
MAX_EVENT_SIZE = dimensione [KB | MB ]
Specifica la dimensione massima consentita per gli eventi. MAX_EVENT_SIZE deve essere impostato solo per consentire singoli eventi di dimensioni maggiori di MAX_MEMORY; impostandolo su meno di MAX_MEMORY genera un errore. size è un numero intero e può essere espresso in kilobyte (KB) o megabyte (MB). Se size è espresso in kilobyte, la dimensione minima consentita è di 64 KB. Quando MAX_EVENT_SIZE è impostato, vengono creati due buffer di dimensioni oltre a MAX_MEMORY e la memoria totale usata per il buffer degli eventi è MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NESSUNO | PER_NODE | PER_CPU }
Specifica l'affinità dei buffer eventi. Le opzioni diverse da NONE comportano più buffer e un consumo di memoria superiore, ma possono evitare conflitti e migliorare le prestazioni nei computer di dimensioni maggiori.
NESSUNO
Un singolo set di buffer viene creato all'interno dell'istanza del motore di database.
PER_NODE
Viene creato un set di buffer per ogni nodo NUMA.
PER_CPU
Viene creato un set di buffer per CPU.
TRACK_CAUSALITY = { ON | OFF }
Specifica se viene tenuta traccia della causalità. Se abilitato, la causalità consente la correlazione di eventi correlati in diverse connessioni server.
STARTUP_STATE = { ON | OFF }
Specifica se avviare automaticamente o meno questa sessione dell'evento all'avvio di SQL Server.
Nota
Se STARTUP_STATE = ON, la sessione eventi viene avviata quando il motore di database viene arrestato e quindi riavviato. Per avviare immediatamente la sessione eventi, usare ALTER EVENT SESSION ... ON SERVER STATE = START.
In...
La sessione eventi viene avviata all'avvio.
OFF
La sessione eventi non viene avviata all'avvio.
MAX_DURATION = { durata dell'ora { SECONDS | MINUTES | ORE | DAYS } | UNLIMITED }
Vale a: SQL Server 2025 (17.x)
ILLIMITATO
Crea una sessione evento che viene eseguita a tempo indeterminato dopo l'avvio, fino a quando non viene interrotta usando l'istruzione
ALTER EVENT SESSION ... STATE = STOP. Questo è il valore predefinito seMAX_DURATIONnon è specificato.durata del tempo SECONDS | MINUTES | ORE | GIORNI
Crea una sessione evento che si arresta automaticamente dopo l'intervallo di tempo specificato dopo l'avvio della sessione. La durata massima supportata è 2.147.483 secondi o 35.792 minuti o 596 ore o 24 giorni.
Per altre informazioni, vedere Sessioni di eventi associati al tempo.
Osservazioni:
Per altre informazioni sugli argomenti della sessione eventi, vedere Sessioni di eventi estesi.
L'ordine di precedenza degli operatori logici prevede NOT come operatore con precedenza massima, seguito da AND e quindi da OR.
Autorizzazioni
SQL Server e Istanza gestita di SQL di Azure richiedono l'autorizzazione CREATE ANY EVENT SESSION (introdotta in SQL Server 2022) o ALTER ANY EVENT SESSION .
Azure SQL Database e SQL database in Microsoft Fabric richiedono il CREATE ANY DATABASE EVENT SESSION permesso nel database.
Suggerimento
SQL Server 2022 ha introdotto autorizzazioni più granulari per gli eventi estesi. Per altre informazioni, vedere Blog: Nuove autorizzazioni granulari per SQL Server 2022 e Azure SQL per migliorare l'adesione a PoLP.
Esempi
A. Esempio di SQL Server e Istanza gestita di SQL di Azure
Nell'esempio seguente viene illustrato come creare una sessione dell'evento denominata test_session. Questo esempio aggiunge due eventi e usa la event_file destinazione, limitando le dimensioni di ogni file a 256 MB e limitando il numero conservato di file a 10.
IF EXISTS (SELECT 1
FROM sys.server_event_sessions
WHERE name = 'test_session')
DROP EVENT SESSION test_session ON SERVER;
CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
(
SET filename = N'C:\xe\test_session.xel',
max_file_size = 256,
max_rollover_files = 10
)
WITH (MAX_MEMORY = 4 MB);
B. Esempi di database SQL di Azure
Ad esempio, vedere Creare una sessione eventi con una destinazione event_file in Archiviazione di Azure e Creare una sessione eventi con una destinazione ring_buffer in memoria.
Gli esempi di codice per il database SQL di Azure e Istanza gestita di SQL possono essere diversi
Alcuni esempi di codice Transact-SQL scritti per SQL Server richiedono piccole modifiche da eseguire nel database SQL di Azure o nel database SQL di Fabric. Una categoria di tali esempi di codice prevede viste del catalogo i cui prefissi del nome differiscono a seconda del tipo di motore di database:
-
server_- prefisso per SQL Server e Istanza gestita di SQL di Azure -
database_- prefisso per il database SQL di Azure, il database SQL in Infrastruttura e Istanza gestita di SQL
Il database SQL di Azure e il database SQL in Fabric supportano solo sessioni di eventi con ambito database. SQL Server Management Studio (SSMS) supporta sessioni di eventi con ambito di database per Azure SQL Database: un nodo Eventi Estesi contenente sessioni con ambito di database appare sotto ogni database in Object Explorer.
Istanza gestita di SQL di Azure supporta sia sessioni con ambito database che sessioni con ambito server. SSMS supporta completamente le sessioni con ambito server per Istanza gestita di SQL: un nodo Eventi estesi contenente tutte le sessioni con ambito server viene visualizzato nella cartella Gestione per ogni istanza gestita in Esplora oggetti.
Nota
Le sessioni di eventi con ambito server sono consigliate per Istanza gestita di SQL di Azure.
Le sessioni di eventi con ambito database non vengono visualizzate in Esplora oggetti in SSMS per Istanza gestita di SQL di Azure. In un'istanza gestita di SQL, le sessioni di eventi con ambito database possono essere interrogate e gestite solo con Transact-SQL.
Come riferimento visivo, la tabella seguente elenca e confronta due subset delle viste di catalogo. I subset hanno prefissi di nome diversi perché supportano diversi tipi di motori di database.
| Nome in SQL Server e Istanza gestita di SQL di Azure | Nome nel database SQL di Azure, nel database SQL di Fabric e in Istanza gestita di SQL di Azure |
|---|---|
sys.server_event_session_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |
Contenuti correlati
- Creare una sessione eventi con una destinazione event_file in Archiviazione di Azure
- Destinazioni eventi estesi
- sys.server_event_sessions (Transact-SQL)
- sys.dm_xe_objects (Transact-SQL)
- sys.dm_xe_object_columns (Transact-SQL)
- ALTER EVENT SESSION (Transact-SQL)
- SESSIONE DI EVENTO DI ABBANDONO (Transact-SQL)