Compartir por


Eventos extendidos en base de datos de Azure SQL y Azure SQL Managed Instance

Se aplica a: Azure SQL Database Azure SQL Managed Instance

Para obtener una introducción a los eventos extendidos, consulte:

El conjunto de características, la funcionalidad y los escenarios de uso para eventos extendidos en base de datos de Azure SQL y Azure SQL Managed Instance son similares a los disponibles en SQL Server. Las diferencias principales son:

  • El destino event_file siempre usa blobs en Azure Storage, en lugar de archivos en el disco.
  • En base de datos de Azure SQL las sesiones de eventos son siempre con ámbito de base de datos. Esto significa que:
    • Una sesión de eventos en una base de datos no puede recopilar eventos desde otra base de datos.
    • Debe producirse un evento en el contexto de una base de datos de usuario que se incluirá en una sesión.
  • En Azure SQL Managed Instance, puede crear sesiones de eventos con ámbito de servidor y ámbito de base de datos. Se recomienda usar sesiones de eventos con ámbito de servidor para la mayoría de los escenarios.

Introducción

Hay dos ejemplos que le ayudarán a comenzar a trabajar con eventos extendidos en base de datos de Azure SQL y Azure SQL Managed Instance rápidamente:

  • Cree una sesión con un destino de event_file en Azure Storage. En este ejemplo se muestra cómo capturar datos de eventos en un archivo (blob) en Azure Storage mediante el destino event_file. Úselo si necesita conservar los datos de eventos capturados o si desea usar el visor de eventos en SQL Server Management Studio (SSMS) para analizar los datos capturados.
  • Cree una sesión con un destino de ring_buffer en memoria. En este ejemplo se muestra cómo capturar los eventos más recientes de una sesión de eventos en la memoria mediante el destino ring_buffer. Úselo como una manera rápida de examinar los eventos recientes durante investigaciones ad hoc o solución de problemas, sin tener que almacenar datos de eventos capturados.

Los eventos extendidos se pueden usar para supervisar las réplicas de solo lectura. Para obtener más información, vea Lectura de consultas en réplicas.

procedimientos recomendados

Adopte los siguientes procedimientos recomendados para usar eventos extendidos en base de datos de Azure SQL y Azure SQL Managed Instance de forma confiable y sin afectar al rendimiento de la carga de trabajo y el estado del motor de base de datos.

  • Si usa el destino event_file:
    • Use una cuenta de almacenamiento en la misma región de Azure que la base de datos o la instancia administrada donde se crean sesiones de eventos.
    • Alinee la redundancia de la cuenta de almacenamiento con la redundancia de la base de datos, el grupo elástico o la instancia administrada. Para los recursos con redundancia local, use LRS, GRS o RA-GRS. Para los recursos con redundancia de zona, use ZRS, GZRS o RA-GZRS. Consulte Redundancia de Azure Storage para más detalles.
    • No use ningún nivel de acceso de blob distinto de Hot.
  • Si desea crear una sesión de eventos en ejecución continua que se inicie automáticamente después de cada reinicio de Motor de base de datos (por ejemplo, después de una conmutación por error o un evento de mantenimiento), incluya la opción de sesión de eventos de STARTUP_STATE = ON en las instrucciones CREATE EVENT SESSION o ALTER EVENT SESSION.
  • Por el contrario, use STARTUP_STATE = OFF para sesiones de eventos a corto plazo, como las que se usan en la solución de problemas ad hoc.
  • En la base de datos de Azure SQL, no leas los eventos de interbloqueo de la sesión de eventos integrada dl. Si hay un número grande de eventos de interbloqueo recopilados, leerlos con la función sys.fn_xe_file_target_read_file() puede provocar un error de memoria insuficiente en la base de datos master. Esto puede afectar al procesamiento de inicio de sesión y provocar una interrupción de la aplicación. Para conocer las formas recomendadas de supervisar interbloqueos, consulta Recopilación de gráficos de interbloqueo en la base de datos de Azure SQL con eventos extendidos.

Destinos de sesión de eventos

Base de datos de Azure SQL y Azure SQL Managed Instance son compatibles con los siguientes destinos:

  • Destino event_file. Escribe búferes completos en un blob de un contenedor de Azure Storage.
  • Destino ring_buffer. Contiene datos de eventos en la memoria hasta que se reemplazan por nuevos datos de eventos.
  • Destino event_counter. Cuenta todos los eventos que tienen lugar durante una sesión de eventos extendidos.
  • Destino histograma. Cuenta las apariciones de valores diferentes de campos o acciones en cubos independientes.
  • event_stream. Transmite datos de eventos a una aplicación .NET.

Nota:

El destino event_stream de base de datos de Azure SQL y Azure SQL Managed Instance está en versión preliminar.

Diferencias de Transact-SQL

Al ejecutar las instrucciones CREATE EVENT SESSION, ALTER EVENT SESSION y DROP EVENT SESSION en SQL Server y en Azure SQL Managed Instance, se usa la cláusula ON SERVER. En Azure SQL Database, se usa la cláusula ON DATABASE en su lugar, porque en las sesiones de eventos de Azure SQL Database están en el ámbito de la base de datos.

Vistas de catálogo de eventos extendidos

Los eventos extendidos proporcionan vistas de catálogos. Las vistas de catálogo le indican los metadatos o la definición de la sesión de eventos. Estas vistas no devuelven información acerca de las instancias de sesiones de eventos activas.

Nombre de la vista de catálogo Descripción
sys.database_event_session_actions Devuelve una fila por cada acción en cada evento de una sesión de eventos.
sys.database_event_session_events Devuelve una fila por cada evento de una sesión de eventos.
sys.database_event_session_fields Devuelve una fila por cada columna personalizable que se estableció de forma explícita en los eventos y destinos.
sys.database_event_session_targets Devuelve una fila para cada destino de evento de una sesión de eventos.
sys.database_event_sessions Devuelve una fila por cada sesión de eventos en la base de datos.

Vistas de administración dinámica de eventos extendidos

Los eventos extendidos proporcionan varias vistas de administración dinámica (DMV). Las DMV devuelven información sobre las sesiones de eventos iniciadas.

Nombre de DMV Descripción
sys.dm_xe_database_session_event_actions Devuelve información sobre las acciones de la sesión de eventos.
sys.dm_xe_database_session_events Devuelve información sobre los eventos de la sesión.
sys.dm_xe_database_session_object_columns Muestra los valores de configuración de los objetos enlazados a una sesión.
sys.dm_xe_database_session_targets Devuelve información acerca de los destinos de la sesión.
sys.dm_xe_database_sessions Devuelve una fila por cada sesión de eventos ejecutándose en la actual base de datos.

DMV comunes

Hay DMV de eventos extendidos adicionales que son comunes a Azure SQL Database, Azure SQL Managed Instance y SQL Server:

Eventos, acciones y destinos disponibles

Al igual que en SQL Server, puede obtener eventos, acciones y destinos disponibles mediante esta consulta:

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;

Permisos

Sugerencia

En 2022, Microsoft introdujo una serie de nuevos permisos más granulares para eventos extendidos, para obtener más información, vea Blog: Nuevos permisos granulares para SQL Server 2022 y Azure SQL para mejorar el cumplimiento con PoLP.

En la base de datos de Azure SQL y Azure SQL Managed Instance, los eventos extendidos admiten un modelo de permisos granular. Se pueden conceder los permisos siguientes:

CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION

Para obtener información sobre los controles de cada uno de estos permisos, vea CREATE EVENT SESSION, ALTER EVENT SESSION y DROP EVENT SESSION.

Todos estos permisos se incluyen en el permiso CONTROL de la base de datos o la instancia administrada. El propietario de la base de datos de Azure SQL (dbo), los miembros del rol de base de datos db_owner y los administradores del servidor lógico contienen el permiso de base de datos CONTROL. En Azure SQL Managed Instance, los miembros del rol de servidor sysadmin contienen el permiso en la instancia CONTROL.

Autorización de contenedor de almacenamiento y control

Cuando se usa el destino event_file, los datos de eventos se almacenan en blobs en un contenedor de Azure Storage. El Motor de base de datos que ejecuta la sesión de eventos debe tener acceso específico a este contenedor. Puede conceder este acceso de una de las maneras siguientes:

  • Asigne el rol RBAC colaborador de datos de Storage Blob a la identidad administrada del servidor lógico de Azure SQL o de la instancia administrada de Azure SQL en el contenedor y cree una credencial para indicar al Motor de base de datos que use la identidad administrada para la autenticación.

    Como alternativa a la asignación del rol RBAC colaborador de datos de Storage Blob, puede asignar las siguientes acciones de RBAC:

    Espacio de nombres Action
    Microsoft.Storage/storageAccounts/blobServices/containers/ read
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/ delete
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/ read
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/ write

    Nota:

    El uso de identidad administrada con sesiones de eventos extendidos está en versión preliminar.

  • Cree un token de SAS para el contenedor y almacene el token en una credencial.

    En base de datos de Azure SQL, debe usar una credencial con ámbito de base de datos. En Azure SQL Managed Instance, use una credencial con ámbito de servidor.

    El token de SAS que cree para el contenedor de Azure Storage debe cumplir los siguientes requisitos:

    • Tener los rwdl permisos (Read, Write, Delete, List).
    • Tener la hora de inicio y expiración que abarcan la duración de la sesión de eventos.
    • No tener restricciones de direcciones IP.

Gobernanza de recursos

En Azure SQL Database, el consumo de memoria por sesiones de eventos extendidos se controla dinámicamente mediante el Motor de base de datos para minimizar la contención de recursos.

Hay un límite en la memoria disponible para las sesiones de eventos:

  • En una base de datos única, la memoria total de sesión se limita a 128 MB.
  • En un grupo elástico, las bases de datos individuales están limitadas por los límites de base de datos única y, en total, no pueden superar los 512 MB.

Si recibe un mensaje de error que hace referencia a un límite de memoria, las acciones correctivas que puede realizar son:

  • Ejecutar menos sesiones de eventos simultáneas.
  • Con instrucciones CREATE y ALTER para sesiones de eventos, reduzca la cantidad de memoria que especifique en la cláusula MAX_MEMORY para la sesión.

Nota:

En eventos extendidos, la cláusula MAX_MEMORY aparece en dos contextos: al crear o modificar una sesión (en el nivel de sesión) y al usar el destino ring_buffer (en el nivel de destino). Los límites anteriores se aplican a la memoria de nivel de sesión.

Hay un límite en el número de sesiones de evento iniciadas en Azure SQL Database:

  • El límite es de 100 en una base de datos única.
  • En un grupo elástico, el límite es de 100 sesiones con ámbito de base de datos por grupo.

En grupos elásticos densos, puede producirse un error al iniciar una nueva sesión de eventos extendidos debido a las restricciones de memoria incluso cuando el número total de sesiones iniciadas es inferior a 100.

Para buscar la memoria total consumida por una sesión de eventos, ejecute la consulta siguiente mientras está conectada a la base de datos donde se inicia la sesión de eventos:

SELECT name AS session_name,
       total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;

Para buscar la memoria total de la sesión de eventos de un grupo elástico, esta consulta debe ejecutarse en todas las bases de datos del grupo.