Eventi estesi nel database SQL di Azure

Si applica a: Database SQL di Azure

Il set di funzionalità di eventi estesi in Azure SQL Database è un subset affidabile delle funzionalità su SQL Server e Istanza gestita di SQL di Azure.

XEvent è un nome alternativo informale utilizzato talvolta per "eventi estesi" in blog e altri percorsi informali.

Altre informazioni sugli eventi estesi sono disponibili all'indirizzo:

Prerequisiti

Questo articolo presuppone che si abbia già una certa conoscenza di:

  • Database SQL di Azure

  • Eventi estesi

  • La maggior parte della documentazione relativa agli eventi estesi si applica a SQL Server, database Azure SQL e Istanza gestita di SQL di Azure.

Un’esposizione precedente a quanto riportato di seguito è utile quando si sceglie il file evento come destinazione:

Esempi di codice

Gli articoli correlati forniscono due esempi di codice:

Differenze di Transact-SQL

  • Quando si esegue il comando CREATE EVENT SESSION su SQL Server, si utilizza la clausola ON SERVER . Ma in Azure SQL Database si usa invece la clausola ON DATABASE.

  • La clausola ON DATABASE riguarda anche i comandi Transact-SQL ALTER EVENT SESSION e DROP EVENT SESSION.

  • È consigliabile includere l'opzione della sessione eventi di STARTUP_STATE = ON nelle istruzioni CREATE EVENT SESSION o ALTER EVENT SESSION .

    • Il valore = ON supporta un riavvio automatico dopo una riconfigurazione del database logico a causa di un failover.

Nuove viste del catalogo

La funzionalità degli eventi estesi è supportata da diverse viste del catalogo. Le viste del catalogo indicano i metadati o le definizioni di sessioni di eventi create dall'utente nel database corrente. Le 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 evento nel database.

In Microsoft SQL Server le viste del catalogo simili hanno nomi che includono .server_ anziché .database_. Il modello di nome è simile a sys.server_event_%.

DMV

Il database SQL di Azure include viste a gestione dinamica (DMV) che supportano gli eventi estesi. Le DMV indicano le sessioni di eventi attive .

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 con ambito nel database corrente.

In Microsoft SQL Server, le viste del catalogo simili vengono denominate senza la parte _database del nome, ad esempio:

  • sys.dm_xe_sessions anziché sys.dm_xe_database_sessions.

DMV comuni a entrambi

Per gli eventi estesi sono disponibili DMV aggiuntivi comuni a Azure SQL Database, Istanza gestita di SQL di Azure e Microsoft SQL Server:

Trovare gli eventi estesi, le azioni e le destinazioni disponibili

Per ottenere un elenco degli eventi, delle azioni e della destinazione disponibili, usare la query di esempio:

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;

 

Destinazioni per le sessioni di eventi del database di Azure SQL

Di seguito sono riportate le destinazioni che possono acquisire i risultati dalle sessioni di eventi in Azure SQL Database:

L'API Event Tracing for Windows (ETW) non è disponibile per gli eventi estesi in Azure SQL Database.

Restrizioni

Esistono alcune differenze relative alla sicurezza che si basano sull'ambiente cloud di Azure SQL Database:

  • Gli eventi estesi si basano sul modello di isolamento single-tenant. Una sessione di eventi in un database non può accedere a dati o eventi da un altro database.
  • Non è possibile eseguire un'istruzione CREATE EVENT SESSION nel contesto del master database.

Modello di autorizzazione

Per eseguire un'istruzioneCREATE EVENT SESSION, è necessario disporre dell'autorizzazione Control per il database. Il proprietario del database (dbo) dispone dell’autorizzazione controllo .

Autorizzazioni del contenitore di archiviazione

Il token della firma di accesso condiviso generato per il contenitore di Archiviazione di Azure deve specificare rwl per le autorizzazioni. Questo valore rwl fornisce le autorizzazioni seguenti:

  • Lettura
  • Scrittura
  • Elenco

Considerazioni sulle prestazioni

Esistono scenari in cui un uso intensivo di eventi estesi può accumulare più memoria attiva di quanto è adatto per l'intero sistema. Di conseguenza, Azure SQL database imposta e modifica dinamicamente i limiti sulla quantità di memoria attiva che può essere accumulata da una sessione eventi. Molti fattori vengono utilizzati nel calcolo dinamico.

È disponibile un limite di memoria per le sessioni XEvent in Azure SQL Database:

  • In database singolo Azure SQL nel modello di acquisto DTU ogni database può usare fino a 128 MB. Questo valore viene elevato a 256 MB solo nel livello Premium.
  • In database Azure SQL singolo nel modello di acquisto vCore ogni database può usare fino a 128 MB.
  • In un pool elastico i singoli database sono limitati dai limiti del database singolo e in totale non possono superare 512 MB.

Se si riceve un messaggio di errore che indica che è stato applicato un massimo di memoria, alcune azioni correttive da eseguire sono:

  • Eseguire meno sessioni di eventi simultanee.
  • Tramite le istruzioni CREATE e ALTER per le sessioni di eventi, ridurre la quantità di memoria specificata nella clausola MAX_MEMORY .

È previsto un limite per il numero di sessioni XEvent avviate in Azure SQL Database:

  • In un singolo database Azure SQL il limite è 100.
  • In un pool elastico il limite è 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.

Latenza di rete

La destinazione del file evento potrebbe subire una latenza di rete o errori durante il mantenimento dei dati nei BLOB di archiviazione di Azure . Altri eventi in Azure SQL Database potrebbero essere ritardati mentre attendono il completamento della comunicazione di rete. Questo ritardo può rallentare il carico di lavoro.

  • Per ridurre questo rischio delle prestazioni, evitare di impostare l'opzione EVENT_RETENTION_MODE su NO_EVENT_LOSS nelle definizioni della sessione di eventi.