Inicio rápido: Eventos extendidos

Se aplica a:SQL ServerAzure SQL DatabaseAzure 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. Consulta 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:

  • Consultar cómo crear una sesión de eventos en SQL Server Management Studio (SSMS), con capturas de pantalla de ejemplo
  • Correlacionar las capturas de pantalla con las instrucciones Transact-SQL equivalentes
  • Comprender en detalles los términos y conceptos subyacentes a la interfaz de usuario de SSMS y las instrucciones T-SQL de XEvents
  • Descubrir 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
  • Descubre cómo puedes buscar y detectar todos los eventos disponibles
  • Descripción de las relaciones entre las vistas del sistema de Eventos extendidos

Sugerencia

Para obtener información sobre los Eventos extendidos de Azure SQL Database, incluidos los ejemplos de código, consulta Eventos extendidos en SQL Database.

Requisitos previos iniciales

Para empezar, necesitarás lo siguiente:

  1. Descargue SQL Server Management Studio (SSMS). Se recomienda usar una versión reciente de SSMS con las mejoras y correcciones más recientes.
  2. Asegúrate de que tu cuenta tenga el permiso de servidor de ALTER ANY EVENT SESSION.

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 esta 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 te interesan
  • Cómo quieres que el sistema te 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, 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. Haz clic con el botón derecho en Sesiones y selecciona Nueva sesión. Es preferible usar el cuadro de diálogo Nueva sesión que el Asistente para nueva sesión, aunque ambos son similares.

  3. En la parte superior izquierda, selecciona 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.

    Screenshot of New Session > General > Session name.

  4. En la parte superior izquierda de la página, selecciona la página Eventos.

    Screenshot of New Session > Events > Select > Event library, Selected events.

  5. 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.
  6. Quédate en la página Eventos y selecciona en el botón Configurar en la parte superior derecha. Se abrirá el cuadro Opciones de configuración de eventos para los eventos seleccionados.

    Screenshot of New Session > Events > Configure > Filter (Predicate) > Field.

  7. Selecciona la pestaña Filtro (predicado). A continuación, selecciona Seleccionar aquí para agregar una cláusula. Configuramos este filtro (también conocido como predicado) para capturar todas las instrucciones SELECT que tienen una cláusula HAVING.

  8. 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 porcentuales 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.

  9. En la parte superior izquierda, selecciona la página Almacenamiento de datos .

  10. En el área Destinos, selecciona Selecciona aquí para agregar un destino.

    • En la lista desplegable Tipo, elige event_file. Esto significa que los datos del evento se almacenan en un archivo que podamos abrir y ver más tarde. En Azure SQL Managed Instance o Azure SQL Database, los datos de evento se almacenan en blobs de Azure Storage.

    Nota

    A partir de SQL Server 2019, puedes usar Azure Blob Storage en un destino event_file de SQL Server.

    Screenshot of New Session > Data Storage > Targets > Type > event_file.

  11. 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 el ejemplo, se usa C:\Temp\YourSession_Target.xel

    Screenshot of New Session > Advanced > Maximum dispatch latency > OK.

  12. En la parte superior izquierda, selecciona la página Avanzado. Reduce la latencia máxima de envío a 3 segundos.

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

  14. De nuevo en Explorador de objetos, abre o actualiza la carpeta Sesiones y consulta el nuevo nodo para YourSession. La sesión aún no se ha iniciado. La inicias más tarde.

    Screenshot of Node for your new *event session* named YourSession, in the Object Explorer, under Management > Extended Events > Sessions.

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 la interfaz de usuario de Eventos extendidos de SSMS, puedes 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',
        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 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
        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
        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(*) &gt;= 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 puedes usar para ver los datos que se han capturado 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, puedes hacer clic con el botón derecho en el nodo de destino que se encuentra debajo del nodo de la sesión de eventos. 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.

Screenshot of View Target Data, in SSMS, Management > Extended Events > Sessions > YourSession > package0.event_file, right-click.

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.

Screenshot of Watch Live Data, in SSMS, Management > Extended Events > Sessions > YourSession, right-click.

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

Puedes 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.

Seguimiento de eventos para Windows (ETW)

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 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, 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 tienes la autoridad de suplantar temporalmente otros inicios de sesión, puedes quitar la marca de comentario de las instrucciones EXECUTE AS LOGIN y REVERT para ver si otros inicios de sesión contienen el permiso ALTER ANY EVENT SESSION.

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