Eventi estesi in 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:

  • La event_file destinazione usa sempre i BLOB in Archiviazione di Azure, anziché i file su disco.
  • In database SQL di Azure le sessioni di eventi sono sempre con ambito database. 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.

Attività iniziali

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 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 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 Leggere le 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.

Destinazioni sessione eventi

database SQL di Azure e Istanza gestita di SQL di Azure supportano le destinazioni seguenti:

  • event_file destinazione. Scrive buffer completi in un BLOB in un contenitore Archiviazione di Azure.
  • ring_buffer destinazione. Contiene i dati dell'evento in memoria fino a quando non vengono sostituiti da nuovi dati dell'evento.
  • event_counter destinazione. Conta tutti gli eventi che si verificano durante una sessione di eventi estesi.
  • destinazione istogramma . Conta le occorrenze di valori diversi di campi o azioni in bucket separati.
  • event_stream. Flussi dati dell'evento in 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 edizione Standard SSION, ALTER EVENT edizione Standard SSION e DROP EVENT edizione Standard SSION 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 visualizzazioni del catalogo. Le viste del catalogo indicano i metadati o la definizione della sessione eventi. Queste visualizzazioni non restituiscono informazioni sulle istanze delle sessioni di eventi attive.

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 evento 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 DMV aggiuntivi per gli eventi estesi comuni a database SQL di Azure, Istanza gestita di SQL di Azure e 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

In database SQL di Azure e Istanza gestita di SQL di Azure gli eventi estesi supportano un modello di autorizzazione granulare. È possibile concedere le autorizzazioni seguenti:

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.

Archiviazione l'autorizzazione e il controllo del contenitore

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 accesso specifico a questo contenitore. Per concedere questo accesso, creare un token di firma di accesso condiviso per il contenitore e archiviare il token in una credenziale.

In database SQL di Azure è necessario 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 rwl autorizzazioni (Read, Write, List) .
  • Avere l'ora di inizio e l'ora di scadenza che includono la durata della sessione eventi.
  • Non sono previste restrizioni per gli indirizzi IP.

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 e ALTER per le sessioni di eventi, ridurre la quantità di memoria specificata nella MAX_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 singolo database, 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.