Condividi tramite


Creare una sessione Eventi estesi tramite l'editor di query

È possibile creare una sessione Eventi estesi tramite l'editor di query o è possibile creare una sessione in Esplora oggetti. In Eventi estesi in Esplora oggetti sono disponibili due interfacce utente che è possibile utilizzare per creare, modificare e visualizzare dati della sessione eventi. Tramite una procedura guidata vengono illustrati il processo di creazione della sessione eventi e una nuova interfaccia utente della sessione che fornisce opzioni di configurazione più avanzate. È possibile creare sessioni di eventi estesi per la diagnosi della traccia di SQL Server, che consente di risolvere problemi come i seguenti:

  • Trovare le query con il costo più elevato

  • Trovare le cause principali di contese di latch

  • Trovare una query tramite cui vengono bloccate altre query

  • Risolvere i problemi relativi all'utilizzo eccessivo della CPU causato dalla ricompilazione di query

  • Risolvere problemi relativi ai deadlock

Per informazioni sulla creazione di una sessione Eventi estesi utilizzando la Creazione guidata nuova sessione, vedere Creare una sessione Eventi estesi utilizzando la procedura guidata (Esplora oggetti). Per informazioni sulla creazione di una sessione Eventi estesi utilizzando la nuova interfaccia utente della sessione, vedere Creare una sessione Eventi estesi utilizzando la finestra di dialogo Nuova sessione.

Autorizzazioni

Per creare una sessione Eventi estesi, è necessario disporre dell'autorizzazione ALTER ANY EVENT SESSION.

Creazione di una sessione Eventi estesi tramite l'editor di query

Per creare una sessione Eventi estesi

  1. Nella procedura seguente viene illustrato come creare una sessione Eventi estesi utilizzando l'editor di query in SQL Server Management Studio.

    Determinare gli eventi che si desidera utilizzare nella sessione. Per visualizzare tutti gli eventi disponibili, insieme alla parola chiave e al canale, utilizzare la query seguente:

    [!NOTA]

    Per informazioni sulle parole chiave e sui canali, vedere Pacchetti degli eventi estesi di SQL Server.

    SELECT p.name, c.event, k.keyword, c.channel, c.description FROM
       (
       SELECT event_package = o.package_guid, o.description, 
       event=c.object_name, channel = v.map_value
       FROM sys.dm_xe_objects o
       LEFT JOIN sys.dm_xe_object_columns c ON o.name = c.object_name
       INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name 
       AND c.column_value = cast(v.map_key AS nvarchar)
       WHERE object_type = 'event' AND (c.name = 'CHANNEL' or c.name IS NULL)
       ) c LEFT JOIN 
       (
       SELECT event_package = c.object_package_guid, event = c.object_name, 
       keyword = v.map_value
       FROM sys.dm_xe_object_columns c INNER JOIN sys.dm_xe_map_values v 
       ON c.type_name = v.name AND c.column_value = v.map_key 
       AND c.type_package_guid = v.object_package_guid
       INNER JOIN sys.dm_xe_objects o ON o.name = c.object_name 
       AND o.package_guid = c.object_package_guid
       WHERE object_type = 'event' AND c.name = 'KEYWORD' 
       ) k
       ON
       k.event_package = c.event_package AND (k.event=c.event or k.event IS NULL)
       INNER JOIN sys.dm_xe_packages p ON p.guid = c.event_package
    ORDER BY keyword desc, channel, event
    
  2. In una nuova finestra di query aggiungere le istruzioni seguenti per creare una sessione eventi, sostituendo session_name con il nome che si desidera utilizzare per la sessione:

    Nota importanteImportante

    Nei passaggi da 2 a 6 di questa procedura viene descritta ogni sezione della definizione della sessione eventi. Tutte le istruzioni vengono aggiunte a una singola finestra di query prima dell'esecuzione. Per un esempio completo, vedere la sezione Esempio di questo argomento.

    CREATE EVENT SESSION session_name 
    ON SERVER
    
  3. Aggiungere gli eventi che si desidera monitorare, nel formato package_name.event_name. Per ogni evento, aggiungere una riga simile alla seguente:

    ADD EVENT package_name.event_name
    

    Ad esempio:

    ADD EVENT sqlserver.file_read_completed,
    ADD EVENT sqlserver.file_write_completed
    
  4. (Facoltativo) Dopo avere aggiunto un evento, è possibile aggiungere azioni da eseguire. È inoltre possibile aggiungere predicati. I predicati vengono utilizzati per stabilire i criteri relativi a quando le informazioni sull'evento devono essere utilizzate dalla destinazione. Le azioni vengono aggiunte utilizzando una clausola ACTION, mentre i predicati vengono aggiunti utilizzando una clausola WHERE. Per aggiungere, ad esempio, un'azione e un predicato in cui viene acquisito il testo Transact-SQL per l'evento sqlserver.file_read_completed, quando l'ID del file corrisponde a 1, includere l'istruzione seguente:

    ADD EVENT sqlserver.file_read_completed
       (ACTION (sqlserver.sql_text)
       WHERE file_id = 1),
    
    • Per visualizzare le azioni disponibili, utilizzare la query seguente:

      SELECT p.name AS 'package_name', xo.name AS 'action_name', xo.description, xo.object_type
      FROM sys.dm_xe_objects AS xo
      JOIN sys.dm_xe_packages AS p
         ON xo.package_guid = p.guid
      WHERE xo.object_type = 'action'
      AND (xo.capabilities & 1 = 0 
      OR xo.capabilities IS NULL)
      ORDER BY p.name, xo.name
      
    • Per visualizzare i predicati disponibili per un evento, utilizzare la query seguente, sostituendo event_name con il nome dell'evento per il quale si desidera aggiungere un predicato:

      SELECT *
      FROM sys.dm_xe_object_columns
      WHERE object_name = 'event_name'
      AND column_type = 'data'
      

      Ad esempio:

      SELECT * 
      FROM sys.dm_xe_object_columns 
      WHERE object_name = 'file_read_completed'
      AND column_type = 'data'
      

      Tenere presente che è anche possibile aggiungere origini di predicati globali. Un'origine di predicato globale può essere utilizzata in qualsiasi espressione di predicato. Per visualizzare le origini di predicati globali disponibili, utilizzare la query seguente:

      SELECT p.name AS package_name, xo.name AS predicate_name
         , xo.description, xo.object_type
      FROM sys.dm_xe_objects AS xo
      JOIN sys.dm_xe_packages AS p
         ON xo.package_guid = p.guid
      WHERE xo.object_type = 'pred_source'
      ORDER BY p.name, xo.name
      

      È ad esempio possibile utilizzare l'espressione di predicato seguente per specificare che devono essere raccolti dati per un evento solo le prime cinque volte che l'evento si verifica.

      WHERE package0.counter <= 5
      
  5. Aggiungere la destinazione desiderata, dove verranno elaborati e utilizzati i dati degli eventi. Utilizzare il formato seguente:

    ADD TARGET package_name.target_name
    

    Nell'esempio seguente viene aggiunta la destinazione file asincrona:

    ADD TARGET package0.asynchronous_file_target
       (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
    

    Per visualizzare l'elenco di destinazioni disponibili, utilizzare la query seguente:

    SELECT p.name AS 'package_name', xo.name AS 'target_name'
       , xo.description, xo.object_type 
    FROM sys.dm_xe_objects AS xo
    JOIN sys.dm_xe_packages AS p
       ON xo.package_guid = p.guid
    WHERE xo.object_type = 'target'
    AND (xo.capabilities & 1 = 0
    OR xo.capabilities IS NULL)
    ORDER BY p.name, xo.name
    

    [!NOTA]

    Per informazioni sui diversi tipi di destinazioni, vedere Destinazioni degli eventi estesi di SQL Server.

  6. Rivedere e aggiungere eventuali opzioni di configurazione aggiuntive. È ad esempio possibile configurare opzioni come la modalità di memorizzazione degli eventi, il tempo di permanenza degli eventi nel buffer in memoria o l'avvio automatico della sessione eventi all'avvio di SQL Server. Le opzioni sono descritte nell'argomento ALTER EVENT SESSION (Transact-SQL). Tenere presente che, se queste opzioni non vengono specificate, vengono assegnati valori predefiniti.

  7. Avviare la sessione.

    [!NOTA]

    Per ulteriori informazioni sulla visualizzazione dei risultati della sessione, vedere l'argomento corrispondente per il tipo di destinazione utilizzato nel nodo Destinazioni degli eventi estesi di SQL Server della documentazione online.

Nell'esempio seguente viene creata una sessione Eventi estesi denominata IOActivity che consente di acquisire le informazioni seguenti:

  • Dati degli eventi per le letture di file completate, incluso il testo Transact-SQL associato per le letture di file in cui l'ID del file corrisponde a 1.

  • Dati degli eventi per le scritture di file completate.

  • Dati degli eventi relativi a quando i dati vengono scritti dalla cache del log al file di log fisico.

L'output viene inviato dalla sessione a una destinazione file.

CREATE EVENT SESSION IOActivity
ON SERVER

ADD EVENT sqlserver.file_read_completed
   (
   ACTION (sqlserver.sql_text)
   WHERE file_id = 1),
ADD EVENT sqlserver.file_write_completed,
ADD EVENT sqlserver.databases_log_flush

ADD TARGET package0.asynchronous_file_target 
   (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')

Vedere anche

Riferimento

CREATE EVENT SESSION (Transact-SQL)

Concetti

Destinazioni degli eventi estesi di SQL Server

Pacchetti degli eventi estesi di SQL Server