Condividi tramite


Avvio rapido: Eventi estesi

Si applica a: SQL Server, Database SQL di Azure e Istanza gestita di SQL di Azure

Gli Eventi estesi costituiscono una funzionalità del monitoraggio delle prestazioni leggera che consente di raccogliere i dati per il monitoraggio e la risoluzione dei problemi. Usando gli Eventi estesi, è possibile visualizzare i dettagli delle operazioni interne del motore di database rilevanti per il monitoraggio delle prestazioni e la risoluzione dei problemi. Per altre informazioni sugli Eventi estesi, vedere Informazioni generali sugli eventi estesi.

Questo articolo ha lo scopo di aiutare gli amministratori, i tecnici e gli sviluppatori di SQL che non hanno esperienza con gli Eventi estesi e che vogliono iniziare a usarli e visualizzare i dati degli eventi in pochi minuti.

Gli Eventi estesi sono noti anche come XEvent e talvolta solo come XE.

Dopo avere letto l'articolo, si è in grado di:

  • Vedere come creare una sessione di eventi in SQL Server Management Studio (SSMS), con screenshot di esempio
  • Mettere in correlazione le schermate alle istruzioni Transact-SQL equivalenti
  • Comprendere nel dettaglio i termini e i concetti alla base dell'interfaccia utente di SSMS e delle istruzioni T-SQL XEvents
  • Informazioni su come testare la sessione di eventi
  • Comprendere i risultati della sessione, tra i quali:
    • Opzioni disponibili per l'archiviazione dei risultati
    • Risultati elaborati rispetto a risultati non elaborati
    • Strumenti per visualizzare i risultati in modi diversi e su diverse scale cronologiche
  • Illustra come è possibile cercare e individuare tutti gli eventi disponibili
  • Comprendere le relazioni tra le viste di sistema degli Eventi estesi

Suggerimento

Per altre informazioni sugli Eventi estesi per il database SQL di Azure, tra cui anche codici di esempio, vedere Eventi estesi nel database SQL di Azure e nell’Istanza gestita di SQL di Azure.

Prerequisiti

Per iniziare, è necessario:

  1. Scaricare SQL Server Management Studio (SSMS). È consigliabile utilizzare una versione recente di SSMS con i miglioramenti e le correzioni più recenti.
  2. Assicurarsi che l'account abbia l’autorizzazione server ALTER ANY EVENT SESSION.

Informazioni sulla sicurezza e le autorizzazioni correlate agli Eventi estesi sono disponibili nell'Appendice alla fine di questo articolo.

Eventi estesi in SSMS

SSMS fornisce un'interfaccia utente completamente funzionale per gli Eventi estesi. Molti scenari possono essere eseguiti utilizzando questa interfaccia utente, senza dover usare T-SQL o DMV.

La sezione successiva illustra i passaggi dell'interfaccia utente necessari per creare una sessione di Eventi estesi e visualizzare i dati segnalati. Dopo aver esaminato i passaggi pratici o rivisto quelli presenti in questo articolo, è possibile leggere i concetti coinvolti nei passaggi per una comprensione più approfondita.

Creare una sessione di evento in SSMS

Quando si crea una sessione di Eventi estesi, si indica al sistema:

  • Gli eventi a cui si è interessati
  • La modalità desiderata di ricezione delle segnalazioni di dati

La dimostrazione apre la finestra di dialogo Nuova sessione, che mostra come usare le quattro pagine, denominate:

  • Generali
  • Eventi
  • Archiviazione dati
  • Avanzato

Il testo e gli screenshot di supporto possono essere leggermente diversi nella versione di SSMS, ma devono ugualmente essere rilevanti per la spiegazione dei concetti di base.

  1. Connessione a un'istanza del motore di database. Gli Eventi estesi sono supportati a partire da SQL Server 2014 (12.x), in database SQL di Azure e Istanza gestita di SQL di Azure.

  2. In Esplora oggetti, selezionare Gestione > Eventi estesi. In database SQL di Azure, le sessioni di eventi sono con ambito database, quindi l'opzione Eventi estesi è disponibile in ogni database, non in Gestione. Fare clic con il pulsante destro del mouse sulla cartella Sessioni e selezionare Nuova sessione. La finestra di dialogo Nuova sessione è preferibile rispetto alla finestra di dialogo Procedura guidata nuova sessione, anche se le due finestre sono simili tra loro.

  3. Selezionare la scheda Generale. Quindi digitare YourSession, o qualsiasi nome desiderato, nella casella di testo Nome sessione. Non selezionare ancora OK, perché è comunque necessario immettere alcuni dettagli in altre pagine.

    Screenshot di Nuova sessione > Generale > Nome sessione.

  4. Selezionare la pagina Eventi.

    Screenshot di Nuova sessione > Eventi > Seleziona > Libreria di eventi, Eventi selezionati

  5. Nell'elenco a discesa dell'area Libreria di eventi scegliere Solo nomi evento.

    • Digitare sql_statement_ nella casella di testo. In questo modo l'elenco viene filtrato per visualizzare solo gli eventi con sql_statement_ nel nome.
    • Scorrere e selezionare l'evento denominato sql_statement_completed.
    • Selezionare il pulsante freccia destra > per spostare l'evento nella casella Eventi selezionati.
  6. Sempre nella pagina Eventi selezionare il pulsante Configura. In questo modo viene aperta la casella Opzioni di configurazione evento per gli eventi selezionati.

    Screenshot di Nuova sessione > Eventi > Configura > Filtro (predicato) > Campo

  7. Selezionare la schedaFiltro (predicato); selezionare quindi Seleziona qui per aggiungere una clausola. Questo filtro (noto anche come predicato) viene configurato per acquisire tutte le istruzioni SELECT con una clausola HAVING.

  8. Nell'elenco a discesa Campo, scegliere sqlserver.sql_text.

    • Per Operatore, scegliere like_i_sql_unicode_string. In questo caso, i nel nome dell'operatore significa senza distinzione tra maiuscole e minuscole.
    • Per Valore, digitare %SELECT%HAVING%. In questo caso, i segni di percentuale sono caratteri jolly che corrispondono a qualsiasi stringa di caratteri.

    Nota

    Nel nome del campo in due parti, sqlserver è il nome del pacchetto e sql_text è il nome del campo. L'evento scelto in precedenza, sql_statement_completed, deve essere nello stesso pacchetto del campo scelto.

  9. Selezionare la pagina Archiviazione dati.

  10. Nell'area Destinazioni, selezionare Selezionare per aggiungere una destinazione.

    • Nell'elenco a discesa Tipo scegliere event_file. Selezionando questa opzione i dati degli eventi vengono archiviati in un file che è possibile aprire e visualizzare in seguito. Nel database SQL di Azure o nell'istanza gestita di SQL di Azure, i dati dell'evento sono archiviati in BLOB del servizio di archiviazione di Azure.

    Nota

    A partire da SQL Server 2019 (15.x), è possibile utilizzare Archiviazione BLOB di Azure in un event_file di destinazione in SQL Server.

    Screenshot di Nuova sessione > Archiviazione dati > Destinazioni > Tipo > event_file

  11. Nell'area Proprietà, digitare un nome di percorso e file completo nella casella di testo Nome file sul server. È anche possibile usare il pulsante Sfoglia. L'estensione di file deve essere xel. Nell'esempio viene usato C:\Temp\YourSession_Target.xel

    Screenshot di Nuova sessione > Avanzate > Latenza di recapito massima > OK

  12. Selezionare la pagina delle proprietà Avanzate. Ridurre la Latenza di recapito massima a 3 secondi.

  13. Selezionare il pulsante OK nella parte inferiore per creare questa sessione eventi.

  14. Tornare in Esplora oggetti, aprire o aggiornare la cartella Sessioni e visualizzare il nuovo nodo per YourSession. La sessione non è ancora stata avviata. Si può avviare in un secondo momento.

    Screenshot di Nodo per la nuova *sessione eventi* denominata SessioneUtente, in Esplora oggetti, in Gestione > Eventi estesi > Sessioni.

Modificare una sessione eventi in SSMS

In Esplora oggetti di SSMS è possibile modificare la sessione eventi facendo clic con il pulsante destro del mouse sul relativo nodo e quindi selezionando Proprietà. Viene visualizzata la stessa finestra di dialogo a più pagine.

Creare una sessione eventi usando T-SQL

Nell'interfaccia utente degli Eventi estesi di SSMS è possibile generare uno script T-SQL per creare la sessione eventi come indicato di seguito:

  • Fare clic con il pulsante destro del mouse sul nodo della sessione eventi e quindi selezionare Crea script per sessione > CREATE in > Appunti.
  • Incollare in qualsiasi editor di testo.

Qui è riportata l'istruzione T-SQL CREATE EVENT SESSION generata per YourSession:

CREATE EVENT SESSION [YourSession]
    ON SERVER -- For SQL Server and Azure SQL Managed Instance
    -- ON DATABASE -- For Azure SQL Database
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file
    (SET
        filename = N'C:\Temp\YourSession_Target.xel',
        max_file_size = (2),
        max_rollover_files = (2)
    )
    WITH (
        MAX_MEMORY = 2048 KB,
        EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 3 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
    );
GO

DROP condizionale della sessione eventi

Prima dell'istruzione CREATE EVENT SESSION, è possibile eseguire un'istruzione DROP EVENT SESSION in modo condizionale, nel caso in cui esista già una sessione con lo stesso nome. In questo modo la sessione esistente viene eliminata. Senza questa funzionalità, il tentativo di creare una sessione con lo stesso nome causa un errore.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
GO

Avviare e arrestare la sessione eventi usando T-SQL

Quando si crea una sessione eventi, il valore predefinito è l'avvio non automatico. È possibile avviare o arrestare la sessione eventi in qualsiasi momento usando l'istruzione T-SQL ALTER EVENT SESSION seguente.

ALTER EVENT SESSION [YourSession]
      ON SERVER
    STATE = START; -- STOP;

È possibile configurare l'avvio automatico della sessione eventi all'avvio dell'istanza del motore di database. Vedere la parola chiave STARTUP STATE = ON in CREATE EVENT SESSION.

L'interfaccia utente di SSMS offre una casella di controllo corrispondente, Avvia la sessione eventi all'avvio del server, nella pagina Nuova sessione > Generale.

Testare una sessione eventi

Testare la sessione eventi con questi passaggi:

  1. In Esplora oggetti di SSMS, fare clic con il pulsante destro del mouse sul nodo della sessione, quindi selezionare Avvia sessione.
  2. Durante la connessione allo stesso server (o allo stesso database nel database SQL di Azure) in cui è stata creata la sessione eventi, eseguire l'istruzione SELECT...HAVING un paio di volte. È consigliabile modificare il valore nella clausola HAVING per ogni esecuzione, alternando tra 2 e 3. Ciò consente di visualizzare le differenze nei risultati.
  3. Fare clic con il pulsante destro del mouse sul nodo della sessione, quindi selezionare Arresta sessione.
  4. Leggere la sottosezione successiva su come SELEZIONARE e visualizzare i risultati.
SELECT c.name,
    COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
    ON o.id = c.id
WHERE o.type = 'V'
    AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2     -- Try both values during session.
ORDER BY c.name;

Per completezza, di seguito è riportato l'output di esempio dal precedente SELECT...HAVING.

/* Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
*/

Visualizzare i dati della sessione eventi come XML

In un intervallo di query in SSMS, eseguire l'istruzione SELECT seguente per visualizzare i dati dell'evento acquisiti dalla sessione. Ogni riga costituisce un'occorrenza di evento. CAST(... AS xml) modifica il tipo di dati della colonna da nvarchar a xml. In questo modo è possibile selezionare il valore della colonna per aprirlo in una nuova finestra e facilitarne la lettura.

Nota

La destinazione event_file inserisce sempre una parte numerica nel nome del file xel. Prima di poter eseguire la seguente query, è necessario copiare il nome completo effettivo del file xel che include questa parte numerica e incollarlo nell'istruzione SELECT. Nell'esempio seguente, la parte numerica è _0_131085363367310000.

SELECT object_name,
    file_name,
    file_offset,
    event_data,
    'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
    CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
    'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);

Questa query fornisce due modi per visualizzare i risultati completi di una determinata riga di evento:

  • Eseguire l'istruzione SELECT in SSMS, quindi selezionare una cella della colonna event_data_XML.

  • Copiare la stringa XML da una cella nella colonna event_data. Incollare in qualsiasi editor di testo come Blocco note di Windows e salvare il file con estensione xml. Aprire quindi il file in un browser o in un editor in grado di visualizzare dati XML.

Dati dell'evento in XML

Ora verrà esaminata una parte dei risultati, che sono in formato XML. Il seguente XML viene modificato qui per brevità. <data name="row_count"> visualizza un valore di 6, che corrisponde alle 6 righe di risultati visualizzate in precedenza. Inoltre, è visibile l'istruzione SELECT completa.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT c.name,
            COUNT(*) AS [Count-Per-Column-Repeated-Name]
        FROM sys.syscolumns AS c
        INNER JOIN sys.sysobjects AS o
            ON o.id = c.id
        WHERE o.type = 'V'
            AND c.name LIKE '%event%'
        GROUP BY c.name
        HAVING Count(*) >= 3 --2     -- Try both values during session.
    ORDER BY c.name;</value>
      </data>
</event>

Visualizzare i dati della sessione eventi in SSMS

Nell'interfaccia utente di SSMS sono disponibili numerose funzioni avanzate che è possibile usare per visualizzare i dati acquisiti da una sessione eventi. Per altre informazioni, vedere Visualizzare i dati degli eventi in SQL Server Management Studio.

Si inizia con le opzioni del menu contestuale etichettate Visualizza dati di destinazione e Controlla i dati dinamici.

Visualizza dati di destinazione

In Esplora oggetti di SSMS è possibile fare clic con il pulsante destro del mouse sul nodo di destinazione sotto il nodo della sessione eventi. Nel menu contestuale, selezionare Visualizza dati di destinazione. SSMS visualizza i dati.

La visualizzazione non viene aggiornata quando si verificano nuovi eventi in una sessione. Tuttavia, è possibile selezionare di nuovo Visualizza dati di destinazione .

Screenshot di Visualizzare i dati di destinazione, in SSMS > Gestione > Eventi estesi > Sessioni > SessioneUtente package0.event_file, fare clic con il pulsante destro del mouse.

Controlla i dati dinamici

In Esplora oggettidi SSMS è possibile fare clic con il pulsante destro del mouse sul nodo della sessione eventi. Nel menu contestuale, selezionare Controlla i dati dinamici. SSMS visualizza i dati in ingresso man mano che continuano ad arrivare in tempo reale.

Screenshot di Controllare i dati dinamici, in SSMS, Gestione > Eventi estesi > Sessioni > SessioneUtente, fare clic con il pulsante destro del mouse

Termini e concetti negli Eventi estesi

La tabella seguente elenca i termini usati per gli Eventi estesi e ne descrive i significati.

Termine Descrizione
event session Un costrutto incentrato su uno o più eventi, oltre a elementi di supporto quali azioni e destinazioni. L'istruzione CREATE EVENT SESSION crea ognuna delle sessioni evento. È possibile ALTER una sessione evento in modo da avviarla e arrestarla in base alle proprie esigenze.

Una sessione eventi viene a volte indicata semplicemente come sessione, quando il dal contesto si evince che indica la sessione eventi.

Altre informazioni sulle sessioni eventi sono descritte in: Sessioni degli Eventi estesi.
event Un'occorrenza specifica del sistema che viene controllata da una sessione eventi attiva.

Ad esempio, l'evento sql_statement_completed rappresenta il momento in cui viene completata un'istruzione T-SQL. L'evento può segnalare la durata e altri dati.
target Un elemento che riceve i dati di output da un evento acquisito. La destinazione visualizza i dati all'utente.

Gli esempi includono la destinazione event_file usata in precedenza in questa guida introduttiva e la destinazione ring_buffer che mantiene gli eventi più recenti in memoria.

Qualsiasi tipo di destinazione può essere usata per qualsiasi sessione eventi. Per informazioni dettagliate, vedere Destinazioni per gli Eventi estesi.
action Un campo noto all'evento. I dati del campo vengono inviati alla destinazione. Il campo azione è strettamente correlato al filtro predicato.
predicate o filtro Test di dati in un campo evento, usato in modo che solo un subset interessante di occorrenze dell'evento venga inviato alla destinazione.

Ad esempio, un filtro può includere solo le occorrenze dell'evento sql_statement_completed in cui l'istruzione T-SQL conteneva la stringa HAVING.
package Un qualificatore del nome associato a ogni elemento in un set di elementi incentrato su un core di eventi.

Ad esempio, un pacchetto può avere eventi sul testo T-SQL, un evento potrebbe riguardare T-SQL in un batch. un evento più circoscritto potrebbe riguardare le singole istruzioni T-SQL. Inoltre, per qualsiasi istruzione T-SQL sono disponibili gli eventi started e completed.

Anche i campi appropriati per gli eventi sono inclusi nel pacchetto con gli eventi. La maggior parte delle destinazioni si trova in package0 e viene usata con gli eventi di molti altri pacchetti.

Scenari di Eventi estesi e dettagli di utilizzo

Esistono numerosi scenari per l'uso di Eventi estesi per monitorare e risolvere i problemi relativi al motore di database e ai carichi di lavoro di query. Gli articoli seguenti forniscono esempi che usano scenari correlati ai blocchi:

Come individuare gli eventi disponibili nei pacchetti

La seguente query restituisce una riga per ogni evento disponibile, il cui nome contiene la stringa di tre caratteri sql. È possibile modificare la clausola LIKE per cercare nomi di eventi diversi. Inoltre, il set di risultati identifica il pacchetto che contiene l'evento.

SELECT -- Find an event you want.
    p.name AS [Package-Name],
    o.object_type,
    o.name AS [Object-Name],
    o.description AS [Object-Descr],
    p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
    ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action'  --'target'
    AND p.name LIKE '%'
    AND o.name LIKE '%sql%'
ORDER BY p.name,
    o.object_type,
    o.name;

Nel seguente esempio di risultato viene illustrata la riga restituita, imperniata nel formato column name = value. I dati provengono dall'evento sql_statement_completed usato nei precedenti passaggi di esempio. La descrizione dell'oggetto (in questo esempio, un evento) funge da stringa di documentazione.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

Trovare eventi utilizzando l'interfaccia utente di SSMS

Un'altra opzione di ricerca per nome degli eventi consiste nell'usare la finestra di dialogo Nuova sessione > Eventi > Libreria di eventi visualizzata in una schermata precedente. È possibile digitare un nome di evento parziale e trovare tutti i nomi degli eventi corrispondenti.

Classi di evento Analisi SQL

Una descrizione dell'uso degli eventi estesi con le classi e le colonne di evento di Traccia SQL è disponibile all'indirizzo: Visualizzare gli eventi estesi equivalenti alle classi di eventi di Analisi SQL.

Event Tracing for Windows (ETW)

Le descrizioni dell'uso degli eventi estesi con Event Tracing for Windows (ETW) sono disponibili in:

Sessioni di evento di sistema

Per impostazione predefinita, in SQL Server e Istanza gestita di SQL di Azure vengono create diverse sessioni di eventi di sistema e configurate in modo da essere eseguite al momento dell'avvio del motore di database. Analogamente alla maggior parte delle sessioni di eventi, queste sessioni usano una piccola quantità di risorse e non influiscono materialmente sulle prestazioni del carico di lavoro. Microsoft consiglia che tali sessioni rimangano abilitate e in esecuzione. Le sessioni di integrità, in particolare lasessione system_health, sono spesso utili per il monitoraggio e la risoluzione dei problemi.

È possibile visualizzare le sessioni eventi in Esplora oggetti di SSMS in Gestione>Eventi estesi > Sessioni. Ad esempio, in SQL Server queste sessioni di eventi di sistema sono:

  • AlwaysOn_health
  • system_health
  • telemetry_events

Provider PowerShell

È possibile gestire gli Eventi estesi usando il provider SQL Server PowerShell. Per altre informazioni, vedere Utilizzare il provider PowerShell per eventi estesi.

Visualizzazioni di sistema

Le viste di sistema per gli Eventi estesi includono:

  • Viste del catalogo: per informazioni sulle sessioni eventi definite da CREATE EVENT SESSION.
  • DMV: per informazioni sulle sessioni eventi attive (avviate).

Le Istruzioni SELECT e JOIN da viste di sistema per Eventi estesi in SQL Server forniscono informazioni su:

  • Come unire le viste
  • Diverse query utili basate su queste viste
  • La correlazione tra:
    • Visualizza colonne
    • ClausoleCREATE EVENT SESSION
    • Interfaccia utente di SSMS

Appendice: Query per trovare i titolari di autorizzazioni degli Eventi estesi

Le autorizzazioni indicate in questo articolo sono:

  • ALTER ANY EVENT SESSION
  • VIEW SERVER STATE
  • CONTROL SERVER

L'istruzione SELECT...UNION ALL seguente restituisce le righe che mostrano chi ha le autorizzazioni necessarie per la creazione di sessioni eventi e l'esecuzione di query nelle viste del catalogo di sistema per gli Eventi estesi.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes the permissions
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
    NULL AS [Role-Name],
    prin.name AS [Owner-Name],
    PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
    ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER STATE',
    'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
    prin.name, -- [Role-Name]
    CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
    NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
    ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
    ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';

HAS_PERMS_BY_NAME - funzione

L'istruzione SELECT seguente segnala le autorizzazioni. Si basa sulla funzione predefinita HAS_PERMS_BY_NAME.

Inoltre, se si dispone dell'autorità per impersonare temporaneamente altri account di accesso, è possibile rimuovere il commento dalle istruzioni EXECUTE AS LOGIN e REVERT per verificare se altri account di accesso dispongono dell'autorizzazione ALTER ANY EVENT SESSION.

--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;