Inicio rápido: Eventos extendidos

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Eventos extendidos es una característica ligera de supervisión de rendimiento que permite a los usuarios recopilar los datos necesarios para supervisar y solucionar problemas. Mediante el uso de eventos Extendidos, puedes ver detalles de las operaciones internas del motor de base de datos que son relevantes para la supervisión del rendimiento y la solución de problemas. Consulte Introducción a los Eventos extendidos para obtener más información sobre los Eventos extendidos.

Este artículo tiene como objetivo ayudar a los administradores, ingenieros y desarrolladores de SQL que son nuevos en Eventos extendidos y que quieren empezar a usarlo y ver datos de eventos en cuestión de minutos.

Los Eventos extendidos también se conocen como XEvents y, a veces, solo como XE.

Después de leer este artículo, podrás hacer lo siguiente:

  • Vea cómo crear una sesión de eventos en SQL Server Management Studio (SSMS), con capturas de pantalla de ejemplo.
  • Correlacionar capturas de pantalla con instrucciones Transact-SQL equivalentes.
  • Comprenda en detalle los términos y conceptos subyacentes a la interfaz de usuario de SSMS y las instrucciones T-SQL de XEvents.
  • Obtenga información sobre cómo probar la sesión de eventos.
  • Comprender los resultados de la sesión, entre los que se incluyen:
    • Opciones disponibles para el almacenamiento de resultados
    • Resultados procesados frente a los resultados sin procesar
    • Herramientas para ver los resultados de diferentes maneras y en diferentes escalas de tiempo
  • Vea cómo puede buscar y detectar todos los eventos disponibles.
  • Comprenda las relaciones entre las vistas del sistema De eventos extendidos.

Sugerencia

Para obtener más información sobre los Eventos extendidos de la base de datos de Azure SQL, incluidos los ejemplos de código, consulte Eventos extendidos en base de datos de Azure SQL y Azure SQL Managed Instance.

Requisitos previos

Para empezar, necesitarás lo siguiente:

  • Descargue SQL Server Management Studio (SSMS). Se recomienda usar una versión reciente de SSMS con las mejoras y correcciones más recientes.
  • Asegúrese de que la cuenta tiene CREATE ANY EVENT SESSION (introducida en SQL Server 2022) o ALTER ANY EVENT SESSION el permiso de servidor.
  • Además, al usar SSMS y para ver las sesiones que se crean, el inicio de sesión requiere el permiso VIEW SERVER PERFORMANCE STATE.

Puedes encontrar más información disponible sobre seguridad y permisos relacionados con los Eventos extendidos al final de este artículo en el Apéndice.

Eventos extendidos en SSMS

SSMS proporciona una interfaz de usuario (UI) totalmente funcional para Eventos extendidos. Esta interfaz de usuario sirve para muchos escenarios, sin tener que usar vistas de administración dinámica (DMV) o T-SQL.

En la siguiente sección, puede ver los pasos de la interfaz de usuario para crear una sesión de Eventos extendidos, y para ver los datos que notifica. Después de seguir los pasos prácticos o revisarlos en este artículo, puedes leer los conceptos implicados en los pasos para una comprensión más profunda.

Crear una sesión de evento en SSMS

Cuando crea una sesión de Eventos extendidos, indica al sistema:

  • Qué eventos le interesan.
  • Cómo quiere que el sistema le notifique los datos.

La demostración abre el cuadro de diálogo Nueva sesión, muestra cómo usar tus cuatro páginas, denominadas:

  • General
  • Eventos
  • Almacenamiento de datos
  • Avanzado

El texto y las capturas de pantalla auxiliares pueden ser ligeramente diferentes en la versión de SSMS, pero deben ser relevantes para la explicación de los conceptos básicos.

  1. Conexión a una instancia del motor de base de datos. Los Eventos extendidos se admiten a partir de SQL Server 2014 (12.x), en Azure SQL Database y Azure SQL Managed Instance.

  2. En el Explorador de objetos de SSMS, selecciona Administración> Eventos extendidos. En Azure SQL Database, las sesiones de eventos tienen como ámbito la base de datos, por lo que la opción Eventos extendidos se encuentra en cada base de datos, no en Administración.

  3. Haga clic con el botón derecho en la carpeta Sesiones y seleccione Nueva sesión.... El cuadro de diálogo Nueva sesión... es preferible al Asistente para nueva sesión, aunque los dos son similares.

    Sugerencia

    En estos pasos del tutorial, no haga clic en Aceptar hasta que haya avanzado en las cuatro páginas: General, Eventos, Almacenamiento de datos y Avanzado.

  4. Seleccione la página General. Después, escribe YourSession, o cualquier nombre que quieras, en el cuadro de texto Nombre de sesión. No selecciones Aceptar todavía, ya que aún tienes que escribir algunos detalles en otras páginas.

  5. Seleccione la páginaEventos.

  6. En el área Biblioteca de eventos, en la lista desplegable, elige Solo los nombres de evento.

    • Escribe sql_statement en el cuadro de texto. Esto filtra la lista para mostrar solo los eventos con sql_statement en el nombre.
    • Desplázate y selecciona el evento denominado sql_statement_completed.
    • Selecciona el botón de flecha derecha > para mover el evento al cuadro Eventos seleccionados.
  7. Quédese en la página Eventos y seleccione el botón Configurar. Se abrirá el cuadro Opciones de configuración de eventos para los eventos seleccionados.

    Captura de pantalla de La selección de nuevos eventos > de sesión > en los eventos library. sql_statement_completed está seleccionado. El botón configurar es la siguiente acción.

  8. Seleccione la pestaña Filtro (predicado). A continuación, seleccione la nueva línea de filtro que dice Haga clic aquí para agregar una cláusula. En este tutorial, configurará este filtro (también conocido como predicado) para capturar todas las SELECT instrucciones con una HAVING cláusula .

  9. En la lista desplegable Campo, elige sqlserver.sql_text.

    • En Operador, elige like_i_sql_unicode_string. Aquí, i en el nombre del operador significa que no distingue mayúsculas de minúsculas.
    • En Valor, escribe %SELECT%HAVING%. Aquí, los signos de porcentaje (%) son caracteres comodín para cualquier cadena de caracteres.

    Nota:

    En el nombre de dos partes del campo, sqlserver es el nombre del paquete y sql_text, el nombre del campo. El evento que hemos elegido anteriormente, sql_statement_completed, debe encontrarse en el mismo paquete que el campo que hemos elegido.

    Captura de pantalla de Nueva sesión > Eventos > Configurar > Filtro (predicado) > Campo.

  10. Seleccione la página Almacenamiento de datos.

  11. En el área Destinos , seleccione la nueva línea Tipo de destino que dice Haga clic aquí para agregar un destino. En este tutorial, escribiremos los datos de eventos extendidos capturados en un archivo de eventos. Esto significa que los datos del evento se almacenan en un archivo que podamos abrir y ver más tarde. A partir de SQL Server 2019 (15.x), los datos de eventos también se pueden escribir para almacenarse en Azure Storage, el valor predeterminado en Azure SQL.

    • En la lista desplegable Tipo, elige event_file.
  12. En el área Propiedades, escribe la ruta de acceso completa y el nombre de archivo en el cuadro de texto Nombre de archivo en el servidor. También puede usar el botón Examinar. La extensión del nombre de archivo debe ser xel. En nuestro ejemplo, usamos C:\temp\YourSession_Target.xel.

    Captura de pantalla de Nueva sesión > Almacenamiento de datos > Destinos > Tipo > event_file.

  13. Seleccione la página Avanzadas. De forma predeterminada, este destino .xel de la sesión de eventos extendidos debe tener un impacto mínimo o no en el rendimiento del servidor, pero esta configuración en la página Avanzadas se puede usar para aumentar o reducir los recursos y la latencia.

    Captura de pantalla de La nueva sesión > avanzada.

  14. Selecciona el botón Aceptar en la parte inferior para crear esta sesión de eventos.

  15. De nuevo en el Explorador de objetos de SSMS, abra o actualice la carpeta Sesiones y vea el nuevo nodo para la YourSession sesión de eventos extendidos. La sesión aún no se ha iniciado. En este tutorial, lo iniciaremos más adelante.

Editar una sesión de eventos en SSMS

En el Explorador de objetos de SSMS, puedes editar la sesión de eventos al hacer clic con el botón derecho en su nodo y, después, seleccionar Propiedades. Se muestra el mismo cuadro de diálogo de varias páginas.

Crear una sesión de eventos mediante T-SQL

En SSMS, puede generar un script de T-SQL para crear la sesión de eventos de la siguiente manera:

  • Haz clic con el botón derecho en el nodo de sesión de eventos y, a continuación, selecciona Script de sesión como > CREATE en > Portapapeles.
  • Péguelo en cualquier editor de texto.

Esta es la instrucción T-SQL CREATE EVENT SESSION generada para 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');
GO

Nota:

En Azure SQL Database, use ON DATABASE en lugar de ON SERVER.

DROP condicional de la sesión de eventos

Antes de la instrucción CREATE EVENT SESSION, puedes ejecutar condicionalmente una instrucción DROP EVENT SESSION, en caso de que ya exista una sesión con el mismo nombre. Esto elimina la sesión existente. Sin esto, al intentar crear una sesión con el mismo nombre se produce un error.

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

Iniciar y detener la sesión de eventos mediante T-SQL

Cuando crea una sesión de eventos, el valor predeterminado consiste en no iniciar la ejecución automáticamente. Puedes iniciar o detener la sesión de eventos en cualquier momento mediante la siguiente instrucción ALTER EVENT SESSION de T-SQL.

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

Tienes la opción de configurar la sesión de eventos para que se inicie automáticamente cuando lo haga la instancia del motor de base de datos. Vea la palabra clave STARTUP STATE = ON en CREATE EVENT SESSION.

La interfaz de usuario de SSMS ofrece una casilla correspondiente, Iniciar la sesión de eventos al iniciar el servidor, en la página Nueva sesión > General.

Probar una sesión de eventos

Prueba la sesión de eventos con estos pasos:

  1. En el Explorador de objetos, haz clic con el botón derecho en el nodo de la sesión de eventos y, después, selecciona Iniciar sesión.
  2. Mientras estás conectado al mismo servidor (o a la misma base de datos de Azure SQL Database) donde creó la sesión de eventos, ejecuta la siguiente instrucción SELECT...HAVING un par de veces. Considera la posibilidad de cambiar el valor de la cláusula HAVING para cada ejecución, alternando entre 2 y 3. Esto le permite ver las diferencias en los resultados.
  3. Haz clic con el botón derecho en el nodo de la sesión y, después, selecciona Detener sesión.
  4. Lea la siguiente subsección sobre cómo usar SELECT y ver los resultados.
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;

Para completar, este es el resultado esperado del comando SELECT...HAVING anterior.

/* 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
*/

Ver datos de sesiones de eventos como XML

En una ventana de consulta de SSMS, ejecuta la siguiente instrucción SELECT para ver los datos de eventos capturados por la sesión. Cada fila representa una repetición de eventos. CAST(... AS xml) cambia el tipo de datos de la columna de nvarchar a xml. Esto le permite seleccionar el valor de columna para abrirlo en una nueva ventana a fin de facilitar la lectura.

Nota:

El destino event_file siempre inserta una parte numérica en el nombre de archivo xel. Para poder ejecutar la consulta siguiente, debes copiar el nombre completo real del archivo xel que incluye esta parte numérica y pegarlo en la instrucción SELECT. En el ejemplo siguiente, la parte numérica es _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
);

Esta consulta proporciona dos maneras de ver los resultados completos de cualquier fila de eventos determinada:

  • Ejecuta la instrucción SELECT en SSMS y, después, haz clic en una celda de la event_data_XML.

  • Copie la cadena XML de una celda en la columna event_data. Pégala en un editor de texto sencillo como Notepad y guarda la cadena en un archivo con extensión xml. A continuación, abre el archivo en un explorador o en un editor capaz de mostrar datos XML.

Datos de eventos en XML

A continuación, podemos ver parte de los resultados que se encuentran en formato XML. Aquí se edita el XML para mayor brevedad. Ten en cuenta que <data name="row_count"> muestra el valor de 6, que coincide con las 6 filas de resultados que hemos mostrado anteriormente. Y podemos ver la instrucción 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>

Visualizar datos de sesión de eventos en SSMS

Existen varias características avanzadas en la interfaz de usuario de SSMS que puede usar para ver los datos capturados de una sesión de eventos. Para más información, consulta Ver datos de eventos en SQL Server Management Studio.

Comienzas con las opciones del menú contextual denominadas Ver datos de destino y Observar datos en directo.

Ver datos de destino

En el Explorador de objetos de SSMS, puede hacer clic con el botón derecho en el nodo de destino que se encuentra en el nodo de sesión de eventos, por ejemplo, package0.event_counter. En el menú contextual, selecciona Ver datos de destino. SSMS muestra los datos.

La visualización no se actualiza a medida que se producen nuevos eventos en una sesión. Pero puedes seleccionar Ver datos de destino de nuevo.

Observar datos en directo

En el Explorador de objetosde SSMS, puede hacer clic con el botón derecho en el nodo de la sesión de eventos. En el menú contextual, selecciona Observar datos en directo. SSMS muestra los datos entrantes a medida que llegan en tiempo real.

Términos y conceptos de los Eventos extendidos

En la siguiente tabla se enumeran los términos que se usan en los Eventos extendidos, y se describe su significado.

Término Descripción
event session Una construcción que se centra en torno a uno o más eventos, además de elementos complementarios como acciones y destinos. La instrucción CREATE EVENT SESSION crea cada sesión de eventos. Puedes ALTER una sesión de eventos para iniciarla y detenerla a tu voluntad.

A veces, se hace referencia a una sesión de eventos solo como sesión, cuando el contexto lo aclara significa sesión de eventos.
Puedes encontrar más información sobre las sesiones de eventos en Sesiones de Eventos extendidos.
event Una repetición específica en el sistema que se observa mediante una sesión de eventos activa.

Por ejemplo, el evento sql_statement_completed representa el momento en que cualquier instrucción T-SQL se completa. El evento puede notificar su duración y otros datos.
target Un elemento que recibe los datos de salida de un evento capturado. El destino le muestra los datos.

Entre los ejemplos se incluyen el destino event_file que se usó anteriormente en este inicio rápido y el destino ring_buffer que mantiene los eventos más recientes en la memoria.
Puede usarse cualquier tipo de destino para cualquier sesión de eventos. Para más información, consulta Destinos para Eventos extendidos.
action Un campo conocido del evento. Los datos del campo se envían al destino. El campo de acción está estrechamente relacionado con el filtro de predicado.
predicate o filtro Una prueba de datos en un campo de evento que se usa de forma que solo un subconjunto interesante de las repeticiones de evento se envíe al destino.

Por ejemplo, un filtro podría incluir solo esas repeticiones del evento sql_statement_completed donde la instrucción T-SQL incluía la cadena HAVING.
package Un calificador de nombre adjunto a cada elemento de un conjunto de elementos que se centra en torno al núcleo de los eventos.

Por ejemplo, un paquete puede tener eventos sobre texto T-SQL. Un evento puede tratar todas las instrucciones T-SQL en un lote. Mientras tanto, otro evento más reducido trata sobre las instrucciones T-SQL individuales. Además, para cualquier instrucción T-SQL, existen eventos started y completed.
Los campos apropiados para los eventos también se encuentran en el paquete con los eventos. La mayoría de los destinos se encuentran en package0 y se usan con eventos de muchos otros paquetes.

Escenarios de Eventos extendidos y detalles de uso

Hay numerosos escenarios para usar Eventos extendidos a fin de supervisar y solucionar problemas del motor de base de datos y las cargas de trabajo de consulta. En los artículos siguientes se proporcionan ejemplos de uso de escenarios relacionados con bloqueos:

Cómo detectar eventos disponibles en paquetes

La siguiente consulta devuelve una fila para cada evento disponible cuyo nombre contenga la cadena de tres caracteres sql. Puedes editar la cláusula LIKE para buscar nombres de evento diferentes. El conjunto de resultados también identifica el paquete que contiene el 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;

En el ejemplo de resultado siguiente se muestra la fila devuelta, dinamizada aquí en el formato de column name = value. Los datos provienen del evento sql_statement_completed que se ha usado en los pasos anteriores del ejemplo. La descripción del objeto (un evento, en este ejemplo) sirve como una cadena de documentación.

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

Búsqueda de eventos mediante la interfaz de usuario de SSMS

Otra opción de búsqueda de eventos por nombre es usar el cuadro de diálogo Nueva sesión > Eventos > Biblioteca de eventos que se muestra en una captura de pantalla anterior. Puedes escribir un nombre de evento parcial y buscar todos los nombres de eventos coincidentes.

Clase del evento de Seguimiento de SQL

Puede obtener una descripción de cómo usar Eventos extendidos con las columnas y clases de evento de Seguimiento de SQL en: Ver los Eventos extendidos equivalentes a las clases de evento de Seguimiento de SQL Server.

Event Tracing for Windows (ETW: Seguimiento de eventos para Windows)

Las descripciones de cómo usar Eventos extendidos con Seguimiento de eventos para Windows (ETW) están disponibles en:

Sesiones de eventos del sistema

En SQL Server y Azure SQL Managed Instance, se crean varias sesiones de eventos del sistema de forma predeterminada y se configuran para iniciarse cuando se inicia el motor de base de datos. Al igual que la mayoría de las sesiones de eventos, consumen una pequeña cantidad de recursos y no afectan materialmente al rendimiento de la carga de trabajo. Microsoft recomienda que estas sesiones permanezcan habilitadas y en ejecución. Las sesiones de mantenimiento, especialmente la sesión system_health, suelen ser útiles para la supervisión y la solución de problemas.

Puedes ver estas sesiones de eventos en el Explorador de objetos de SSMS en Administración > Eventos extendidos > Sesiones. Por ejemplo, en SQL Server, estas sesiones de eventos del sistema son las siguientes:

  • AlwaysOn_health
  • system_health
  • telemetry_events

Proveedor de PowerShell

Puedes administrar los Eventos extendidos mediante el proveedor de SQL Server PowerShell. Para obtener más información, vea Usar el proveedor de PowerShell para eventos extendidos.

Vistas del sistema

Las vistas del sistema para Eventos extendidos incluyen:

  • Vistas de catálogo: para obtener información sobre las sesiones de eventos que se han definido mediante CREATE EVENT SESSION.
  • Vistas de administración dinámica (DMV): para obtener información sobre sesiones de eventos (iniciados) activos.

Instrucciones SELECT y JOIN en vistas del sistema para Eventos extendidos en SQL Server proporciona información sobre lo siguiente:

  • Cómo unir las vistas
  • Varias consultas útiles basadas en estas vistas
  • La correlación entre:
    • Ver columnas
    • CláusulasCREATE EVENT SESSION
    • La interfaz de usuario de SSMS

Apéndice: Consultas para buscar titulares de permisos de Eventos extendidos

Los permisos que se mencionan en este artículo son:

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

La siguiente instrucción SELECT...UNION ALL devuelve filas que muestran quién tiene los permisos necesarios para crear sesiones de eventos y consultar las vistas de catálogo del sistema de los Eventos extendidos.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- '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 (
    'CREATE ANY EVENT SESSION',
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER PERFORMANCE STATE',
    '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, función

La siguiente instrucción SELECT informa de los permisos. Se basa en la función integrada HAS_PERMS_BY_NAME.

Además, si tiene la autoridad de suplantar temporalmente otros inicios de sesión, puede quitar la marca de comentario de las instrucciones EXECUTE AS y REVERT para ver si otros inicios de sesión contienen el ALTER ANY EVENT SESSION permiso.

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