Eventi estesi nel database SQL

In questo argomento viene illustrato come l'implementazione di eventi estesi nel database SQL di Azure è leggermente diversa rispetto agli eventi estesi in Microsoft SQL Server.

  • SQL Database V12 ha acquisito la funzionalità degli eventi estesi nella seconda metà del calendario 2015.
  • SQL Server ha gli eventi estesi dal 2008.
  • Il set di funzionalità degli eventi estesi nel database SQL è un subset affidabile delle funzionalità in SQL Server.

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

Per altre informazioni sugli eventi estesi, per il database SQL di Azure e Microsoft SQL Server, vedere l'articolo:

Prerequisiti

In questo argomento si presuppone che si dispone già di una conoscenza di:

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

Esempi di codice

Gli argomenti 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 nel database SQL si utilizza invece la clausola ON DATABASE .

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

  • Una procedura consigliata consiste nell'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 di eventi.
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 di eventi.
sys.database_event_sessions Restituisce una riga per ogni sessione di eventi nel database SQL del database.

In Microsoft SQL Server le viste del catalogo simili hanno nomi che includono .server_ anziché .database_. Il modello del 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 della sessione di eventi.
sys.dm_xe_database_session_events Restituisce informazioni sugli eventi della 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 sono denominate senza la parte del nome _database, ad esempio:

  • sys.dm_xe_sessions, anziché il nome
    sys.dm_xe_database_sessions.

DMV comuni a entrambi

Per gli eventi estesi sono disponibili DMV aggiuntive comuni a Microsoft SQL Server e Azure SQL Database:

  • sys.dm_xe_map_values
  • sys.dm_xe_object_columns
  • sys.dm_xe_objects
  • sys.dm_xe_packages

Trovare gli eventi estesi, le azioni e le destinazioni disponibili

È possibile eseguire un semplice SELECT di SQL per ottenere un elenco di eventi, azioni e destinazioni disponibili.

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 SQL

Di seguito si trovano le destinazioni che possono acquisire i risultati dalle sessioni di eventi nel database SQL:

L’API Tracciamento eventi per Windows (ETW) non è disponibile per gli eventi estesi nel database SQL.

Restrizioni

Esistono un paio di differenze relative alla sicurezza adatte all'ambiente cloud del database SQL:

  • 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 emettere un'istruzione CREATE EVENT SESSION nel contesto del database master.

Modello di autorizzazione

È necessario avere l'autorizzazione Controllo nel database per emettere un'istruzione CREATE EVENT SESSION. 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. Pertanto il sistema di Azure SQL Database imposta e regola in modo dinamico i limiti sulla quantità di memoria attiva che può essere accumulata da una sessione di eventi. Molti fattori vengono utilizzati nel calcolo dinamico.

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.

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 nel database SQL potrebbero subire un ritardo mentre rimangono in attesa del 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.

Altri argomenti con esempi di codice per gli eventi estesi sono disponibili ai collegamenti seguenti. È comunque necessario controllare regolarmente qualsiasi esempio per verificare se è destinato a Microsoft SQL Server o al database SQL di Azure. È quindi possibile decidere se sono necessarie alcune modifiche per eseguire l'esempio.