Paquetes de Eventos extendidos

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Un paquete es un contenedor para objetos de Eventos extendidos de SQL Server Database Engine. Por ejemplo, los siguientes paquetes existen en cualquier motor de base de datos que admita Eventos extendidos:

  • package0: objetos de sistema de Eventos extendidos. Este es el paquete predeterminado.
  • sqlserver: objetos relacionados con el Motor de base de datos
  • sqlos: objetos relacionados de SQL Operating System (SQLOS).

Nota

La característica Auditoría usa internamente el paquete SecAudit. Ninguno de los objetos de este paquete están disponibles con el lenguaje de definición de datos (DDL) de Eventos extendidos.

Los paquetes se identifican por un nombre, un GUID y el módulo binario que contiene el paquete. Un módulo puede ser un archivo ejecutable o una biblioteca de vínculos dinámicos. Para obtener más información, consulta sys.dm_xe_packages.

Un paquete puede contener cualquiera de los objetos siguientes, o todos ellos, que se describen pormenorizadamente más adelante en este artículo:

  • Eventos
  • Targets
  • Acciones
  • Tipos
  • Predicados
  • Maps

Se pueden mezclar objetos de distintos paquetes en una sesión de eventos. Para obtener más información, consulta Sesiones de Eventos extendidos.

Contenido del paquete

En la ilustración siguiente se muestran los objetos que pueden existir en un paquete.

Diagram that shows the relationship of a module, packages, and objects.

Eventos

Los eventos son puntos de supervisión de interés en la ruta de ejecución de un programa, como SQL Server. La activación de un evento conlleva el hecho de que se ha llegado al punto de interés, así como información de estado del momento en que se activó el evento.

Los eventos se pueden utilizar únicamente para realizar el seguimiento o para activar acciones. Estas acciones pueden ser sincrónicas o asincrónicas.

Nota

Un evento desconoce las acciones que se pueden activar en respuesta a la activación del evento.

Un conjunto de eventos de un paquete no se puede cambiar una vez que el paquete se registra con Eventos extendidos.

Todos los eventos tienen un esquema con versiones que define su contenido. Este esquema está formado por columnas de eventos con tipos definidos. Un evento de un tipo específico siempre debe proporcionar sus datos en exactamente el mismo orden que se especifica en el esquema. Sin embargo, un destino de evento no tiene que utilizar todos los datos que se proporcionan.

Clasificación de eventos

Extended Events utiliza un modelo de clasificación de eventos parecido al Seguimiento de eventos para Windows (ETW). Para la clasificación se utilizan dos propiedades de eventos, canal y palabra clave. La utilización de estas propiedades es compatible con la integración de Extended Events en ETW y sus herramientas.

Un canal identifica a los destinatarios de un evento. Los canales se describen en la siguiente tabla.

Término Definición
Administrador Los eventos de administración se destinan principalmente a usuarios finales, administradores y soporte técnico. Los eventos que se encuentran en los canales de administración pueden indicar un problema con una solución bien determinada ante la que un administrador puede emprender una acción. Un ejemplo de un evento de administración es cuando una aplicación falla al conectarse. Estos eventos están documentados o tienen un mensaje asociado que indica al lector qué hacer para rectificar el problema.
Operativos Los eventos operativos se utilizan para analizar y diagnosticar un problema o situación concreta. Se pueden utilizar para activar herramientas o tareas basadas en el problema o situación concreta.
Analytic Los eventos analíticos se publican en grandes cantidades. Describen el funcionamiento del programa y se utilizan normalmente en investigaciones sobre rendimiento.
Depurar Los programadores utilizan los eventos de depuración principalmente para diagnosticar un problema y depurarlo.

Los eventos del canal Depurar devuelven datos sobre el estado interno de la implementación. Los esquemas y los datos que devuelven los eventos pueden cambiar, dejar de ser válidos o eliminarse en versiones futuras del motor de base de datos sin previo aviso.

Una palabra clave es específica de la aplicación y permite llevar a cabo una agrupación más precisa de eventos relacionados, lo que facilita la especificación y recuperación de un evento que se desea utilizar en una sesión. Se puede utilizar la siguiente consulta para obtener información sobre palabras clave:

SELECT map_value AS Keyword
FROM sys.dm_xe_map_values
WHERE name = 'keyword_map';

Targets

Los destinos son los consumidores de evento. Los destinos procesan los eventos, ya sea de forma sincrónica en el subproceso que activa el evento o de forma asincrónica en un subproceso proporcionado por el sistema. Eventos extendidos proporciona varios tipos de destino que se pueden utilizar según corresponda para dirigir el resultado de los eventos. Para obtener más información, consulta Destinos para Eventos extendidos.

La cláusula ADD TARGET se usa para agregar acciones a una sesión de eventos.

Acciones

Una acción es una respuesta o serie de respuestas de programación a un evento. Están enlazadas a un evento y cada evento puede tener su propio conjunto de acciones.

Nota

Las acciones dirigidas a un conjunto concreto de eventos específicos no se pueden enlazar a otros eventos.

Una acción enlazada a un evento se invoca sincrónicamente en el subproceso que activó el evento. Hay muchos tipos de acciones y tienen gran cantidad de funciones. Las acciones pueden:

  • Capturar un volcado de procesos
  • Almacenar información de estado en un contexto local utilizando almacenamiento variable
  • Agregar datos de eventos
  • Anexar datos a datos de eventos

Algunos ejemplos comunes del uso de acciones incluyen:

  • Recopilar texto SQL de una consulta ejecutada por el subproceso que desencadena el evento
  • Recopilar el identificador del plan de consulta, el hash de la consulta y el hash del plan de consulta
  • Recopila atributos de una sesión que haga que se desencadene el evento, incluido el nombre de host de cliente, el nombre principal, el identificador de conexión, etc.
  • Recopilar la pila de llamadas
  • Capturar un volcado de proceso cuando se produce un error específico

La cláusula ACTION se usa para agregar acciones a una sesión de eventos.

Predicados

Los predicados son un conjunto de reglas lógicas que se utilizan para evaluar los eventos cuando se procesan. Esto permite al usuario de Extended Events capturar selectivamente datos de eventos en función de criterios concretos.

Los predicados pueden almacenar datos en un contexto local que se puede utilizar para crear predicados que devuelven el valor verdadero cada n minutos o cada n veces que se activa un evento. Este almacenamiento en el contexto local también se puede utilizar para actualizar dinámicamente el predicado, suprimiendo así activaciones futuras del evento si los eventos contienen datos similares.

Los predicados tienen la capacidad de recuperar información de contexto, como el Id. de subproceso, así como datos específicos del evento. Los predicados se evalúan como expresiones booleanas completas y admiten un cortocircuito en el primer punto donde se detecta que la expresión completa es falsa.

Nota

No se pueden evaluar los predicados con efectos secundarios si se produce un error de comprobación de predicado con anterioridad.

La cláusula WHERE se usa para agregar predicados a una sesión de eventos.

Tipos

En un paquete, cada objeto de Eventos extendidos tiene un tipo. Se usan los siguientes tipos:

  • action
  • event
  • message
  • pred_compare
  • pred_source
  • target
  • type

Para obtener más información, consulta sys.dm_xe_objects.

Maps

Una tabla de asignación asigna un valor interno a una cadena, que permite a un usuario saber qué representa el valor. En lugar de poder obtener solo un valor numérico, un usuario puede obtener una descripción significativa del valor interno. La consulta siguiente muestra cómo obtener valores de asignaciones.

SELECT map_key, map_value
FROM sys.dm_xe_map_values
WHERE name = 'lock_mode';

La consulta anterior produce el resultado siguiente:

map_key map_value
0 NL
1 SCH_S
2 SCH_M
3 S
4 U
5 X
6 IS
7 IU
8 IX
9 SIU
10 SIX
11 UIX
12 BU
13 RS_S
14 RS_U
15 RI_NL
16 RI_S
17 RI_U
18 RI_X
19 RX_S
20 RX_U
21 LAST_MODE

Utilizando esta tabla como ejemplo, supón que tienes una columna denominada lock_mode, y su valor es 5. La tabla indica que 5 se asigna a X, lo que quiere decir que el tipo de bloqueo es Exclusivo.