Eventi estesi nel database SQL di Azure e Istanza gestita di SQL di Azure
Si applica a: Database SQL di Azure Istanza gestita di SQL di Azure
Per un'introduzione agli eventi estesi, vedere:
I set di funzionalità, le funzionalità e gli scenari di utilizzo per gli eventi estesi in database SQL di Azure e Istanza gestita di SQL di Azure sono simili a quanto disponibile in SQL Server. Le differenze principali sono:
- L’obiettivo
event_file
usa sempre i BLOB in Archiviazione di Azure, anziché i file su disco. - Nel database SQL di Azure, le sessioni di eventi sono sempre di tipo database-scoped. Ciò significa che:
- Una sessione di eventi in un database non può raccogliere eventi da un altro database.
- Un evento deve verificarsi nel contesto di un database utente da includere in una sessione.
- In Istanza gestita di SQL di Azure è possibile creare sessioni di eventi con ambito server e con ambito database. È consigliabile usare sessioni di eventi con ambito server per la maggior parte degli scenari.
Operazioni preliminari
Esistono due esempi utili per iniziare a usare eventi estesi in database SQL di Azure e Istanza gestita di SQL di Azure rapidamente:
- Creare una sessione eventi con una destinazione event_file in Archiviazione di Azure. Questo esempio illustra come acquisire i dati degli eventi in un file (BLOB) in Archiviazione di Azure usando la
event_file
destinazione. Usare questa opzione se è necessario rendere persistenti i dati degli eventi acquisiti o se si vuole usare il Visualizzatore eventi in SQL Server Management Studio (SSMS) per analizzare i dati acquisiti. - Creare una sessione eventi con una destinazione ring_buffer in memoria. Questo esempio illustra come acquisire gli eventi più recenti da una sessione di eventi in memoria usando la
ring_buffer
destinazione. Usare questo metodo come modo rapido per esaminare gli eventi recenti durante indagini o risoluzione dei problemi ad hoc, senza dover archiviare i dati degli eventi acquisiti.
Gli eventi estesi possono essere usati per monitorare le repliche di sola lettura. Per altre informazioni, vedere Lettura query sulle repliche.
Procedure consigliate
Adottare le procedure consigliate seguenti per usare gli eventi estesi in database SQL di Azure e Istanza gestita di SQL di Azure in modo affidabile e senza influire sull'integrità del motore di database e sulle prestazioni del carico di lavoro.
- Se si usa la
event_file
destinazione:- Usare un account di archiviazione nella stessa area di Azure del database o dell'istanza gestita in cui si creano sessioni di eventi.
- Allineare la ridondanza dell'account di archiviazione con la ridondanza del database, del pool elastico o dell'istanza gestita. Per le risorse con ridondanza locale, usare l’archiviazione con ridondanza locale, l'archiviazione con ridondanza geografica o RA-GRS. Per le risorse SQL di Azure con ridondanza della zona, usare ZRS, archiviazione con ridondanza geografica della zona o RA-GZRS. Vedere Ridondanza di Archiviazione di Azure per i dettagli.
- Non usare alcun livello di accesso BLOB diverso da
Hot
.
- Se si desidera creare una sessione eventi in esecuzione continua che viene avviata automaticamente dopo ogni motore di database riavvio (ad esempio, dopo un failover o un evento di manutenzione), includere l'opzione sessione eventi di
STARTUP_STATE = ON
nelleCREATE EVENT SESSION
istruzioni oALTER EVENT SESSION
. - Al contrario, usare
STARTUP_STATE = OFF
per sessioni di eventi a breve termine, ad esempio quelle usate nella risoluzione dei problemi ad hoc. - In database SQL di Azure non leggere gli eventi deadlock dalla sessione eventi predefinita
dl
. Se è stato raccolto un numero elevato di eventi deadlock, la lettura con la funzione sys.fn_xe_file_target_read_file() può causare un errore di memoria insufficiente nelmaster
database. Ciò potrebbe influire sull'elaborazione dell'account di accesso e causare un'interruzione dell'applicazione. Per i modi consigliati per monitorare i deadlock, vedere Raccogliere grafici deadlock in database SQL di Azure con eventi estesi.
Destinazioni sessione eventi
Il database SQL di Azure e l'istanza gestita di SQL di Azure supportano le seguenti destinazioni:
- Destinazione event_file. Scrive buffer completi a un BLOB in un contenitore di Archiviazione di Azure.
- destinazione ring_buffer. Contiene i dati dell'evento in memoria fino a quando non vengono sostituiti da nuovi dati dell'evento.
- Destinazione event_counter. Conta tutti gli eventi che si verificano durante una sessione di eventi estesi.
- Destinazione histogram. Conta le occorrenze di valori diversi di campi o azioni in bucket separati.
- event_stream Trasmette i dati dell'evento a un'applicazione .NET.
Nota
La event_stream
destinazione in database SQL di Azure e Istanza gestita di SQL di Azure è in anteprima.
Differenze di Transact-SQL
Quando si eseguono le istruzioni CREATE EVENT SESSION, ALTER EVENT SESSION, e DROP EVENT SESSION in SQL Server e in Istanza gestita di SQL di Azure, si usa la ON SERVER
clausola. In database SQL di Azure si usa invece la ON DATABASE
clausola , perché in database SQL di Azure le sessioni di eventi sono con ambito database.
Viste del catalogo degli eventi estesi
Gli eventi estesi offrono diverse viste del catalogo. Le viste del catalogo indicano i metadati o la definizione della sessione eventi. Queste viste non restituiscono informazioni sulle istanze delle sessioni di eventi attivi.
Nome della vista del catalogo | Descrizione |
---|---|
sys.database_event_session_actions | Restituisce una riga per ogni azione su ogni evento di una sessione dell'evento. |
sys.database_event_session_events | Restituisce una riga per ogni evento in una sessione di eventi. |
sys.database_event_session_fields | Restituisce una riga per ogni colonna personalizzabile impostata in modo esplicito su eventi e destinazioni. |
sys.database_event_session_targets | Restituisce una riga per ogni destinazione di evento per una sessione eventi. |
sys.database_event_sessions | Restituisce una riga per ogni sessione di eventi nel database. |
Viste a gestione dinamica degli eventi estesi
Gli eventi estesi offrono diverse viste a gestione dinamica (DMV). Le DMV restituiscono informazioni sulle sessioni evento avviate.
Nome della DMV | Descrizione |
---|---|
sys.dm_xe_database_session_event_actions | Restituisce informazioni sulle azioni di sessione di evento. |
sys.dm_xe_database_session_events | Restituisce informazioni sugli eventi di sessione. |
sys.dm_xe_database_session_object_columns | Mostra i valori di configurazione per gli oggetti associati a una sessione. |
sys.dm_xe_database_session_targets | Restituisce informazioni sulle destinazioni della sessione. |
sys.dm_xe_database_sessions | Restituisce una riga per ogni sessione di eventi in esecuzione nel database corrente. |
DMV comuni
Esistono eventi estesi DMV aggiuntivi che sono comuni al database SQL di Azure, all’Istanza gestita di SQL di Azure e al SQL Server:
Eventi, azioni e destinazioni disponibili
Come in SQL Server, è possibile ottenere eventi, azioni e destinazioni disponibili usando questa query:
SELECT o.object_type,
p.name AS package_name,
o.name AS db_object_name,
o.description AS db_obj_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE o.object_type IN ('action','event','target')
ORDER BY o.object_type,
p.name,
o.name;
Autorizzazioni
Suggerimento
Nel 2022 Microsoft ha introdotto una serie di nuove 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.
In database SQL di Azure e Istanza gestita di SQL di Azure gli eventi estesi supportano un modello di autorizzazione granulare. Le seguenti autorizzazioni possono essere concesse:
CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION
Per informazioni sui controlli di ognuna di queste autorizzazioni, vedere CREATE EVENT edizione Standard SSION, ALTER EVENT edizione Standard SSION e DROP EVENT edizione Standard SSION.
Tutte queste autorizzazioni sono incluse nell'autorizzazione per il database o l'istanza CONTROL
gestita. In database SQL di Azure, il proprietario del database (dbo
), i membri del db_owner
ruolo del database e gli amministratori del server logico hanno l'autorizzazione del databaseCONTROL
. In Istanza gestita di SQL di Azure i membri del ruolo del sysadmin
server mantengono l'autorizzazione CONTROL
per l'istanza.
Autorizzazione e controllo del contenitore di archiviazione
Quando si usa la event_file
destinazione, i dati degli eventi vengono archiviati in BLOB in un contenitore Archiviazione di Azure. Il motore di database che esegue la sessione eventi deve avere un accesso specifico a questo contenitore. È possibile concedere questo accesso in uno dei modi seguenti:
Assegnare il ruolo Controllo degli accessi in base al ruolo collaboratore ai dati dei BLOB di archiviazione all'identità gestita del server logico SQL di Azure o all'istanza gestita di SQL di Azure nel contenitore e creare una credenziale per indicare al motore di database di usare l'identità gestita per l'autenticazione.
In alternativa all'assegnazione del ruolo Controllo degli accessi in base al ruolo collaboratore ai dati dei BLOB di archiviazione, è possibile assegnare le azioni di controllo degli accessi in base al ruolo seguenti:
Spazio dei nomi Azione Microsoft.Storage/storageAccounts/blobServices/containers/
read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/
delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/
read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/
write
Nota
L'uso dell'identità gestita con sessioni di eventi estesi è disponibile in anteprima.
Creare un token di firma di accesso condiviso per il contenitore e archiviare il token in una credenziale.
In database SQL di Azure si deve usare una credenziale con ambito database. In Istanza gestita di SQL di Azure, usare una credenziale con ambito server.
Il token di firma di accesso condiviso creato per il contenitore Archiviazione di Azure deve soddisfare i requisiti seguenti:
- Disporre delle
rwdl
autorizzazioni (Read
,Delete
Write
, ,List
) . - Avere l'ora di inizio e l'ora di scadenza che includono la durata della sessione eventi.
- Non aver restrizioni degli indirizzi IP.
- Disporre delle
Governance delle risorse
In database SQL di Azure, il consumo di memoria da parte delle sessioni di eventi estesi viene controllato dinamicamente dal motore di database per ridurre al minimo la contesa delle risorse.
Esiste un limite di memoria disponibile per le sessioni di eventi:
- In un singolo database, la memoria totale della sessione è limitata a 128 MB.
- In un pool elastico i singoli database sono limitati dai limiti del database singolo e, in totale, non possono superare i 512 MB.
Se viene visualizzato un messaggio di errore che fa riferimento a un limite di memoria, le azioni correttive che è possibile eseguire sono:
- Eseguire meno sessioni di eventi simultanee.
- Uso delle
CREATE
istruzioni eALTER
per le sessioni di eventi, ridurre la quantità di memoria specificata nellaMAX_MEMORY
clausola per la sessione.
Nota
In Eventi estesi la MAX_MEMORY
clausola viene visualizzata in due contesti: durante la creazione o la modifica di una sessione (a livello di sessione) e quando si usa la ring_buffer
destinazione (a livello di destinazione). I limiti precedenti si applicano alla memoria a livello di sessione.
Esiste un limite al numero di sessioni evento avviate in database SQL di Azure:
- In un database singolo, il limite è 100.
- In un pool elastico, il limite è di 100 sessioni con ambito database per pool.
Nei pool elastici densi, l'avvio di una nuova sessione eventi estesa potrebbe non riuscire a causa di vincoli di memoria anche quando il numero totale di sessioni avviate è inferiore a 100.
Per trovare la memoria totale utilizzata da una sessione eventi, eseguire la query seguente durante la connessione al database in cui viene avviata la sessione eventi:
SELECT name AS session_name,
total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;
Per trovare la memoria totale della sessione eventi per un pool elastico, questa query deve essere eseguita in ogni database del pool.