Destinos de SQL Server Extended Events

Los destinos de Extended Events de SQL Server son los consumidores de eventos. Los destinos pueden escribir en un archivo, agregar datos de eventos o iniciar una tarea relacionada con el evento. Los destinos pueden procesar los datos de forma sincrónica o asincrónica.

El diseño de Extended Events garantiza que los destinos reciban eventos una sola vez por sesión.

Extended Events proporciona los destinos siguientes que pueden utilizarse en una sesión de Extended Events:

  • Creación de depósitos de eventos

    Se usa para contar el número de veces que se produce el evento especificado en función de la acción o columna de evento indicada.

  • Emparejamiento de eventos

    Muchos tipos de eventos se producen en parejas, como por ejemplo, bloqueo y desbloqueo. Se usa para determinar cuándo un determinado evento emparejado no se produce en el conjunto correspondiente.

  • Seguimiento de eventos para Windows (ETW)

    Se usa para establecer correlaciones entre eventos de SQL Server y datos de evento de la aplicación o del sistema operativo Windows.

  • Archivo de eventos

    Se usa para escribir en disco la salida de la sesión de eventos de los búferes de memoria completos.

  • Contador de eventos sincrónicos

    Cuenta todos los eventos especificados que se producen durante una sesión de Extended Events. Se usa para obtener información sobre las características de carga de trabajo sin agregar la sobrecarga que supone una colección de eventos completa.

  • Búfer en anillo

    Se usa para mantener los datos de evento en memoria con un orden FIFO (primero en entrar, primero en salir) o con un orden FIFO por evento.

Los destinos se pueden dividir en destinos de archivo y destinos en memoria.

  • El destino de archivo de eventos y el destino ETW se consideran destinos de archivo.

  • La creación de depósitos de eventos, el emparejamiento de eventos, el contador de eventos sincrónicos y el búfer en anillo se consideran destinos en memoria, donde los datos se guardan en el búfer de la sesión (la columna target_data de la vista de administración dinámica sys.dm_xe_session_targets).

Tenga en cuenta que cuando detiene una sesión en la que se usa un destino en memoria, se pierde toda la información almacenada en el búfer de la sesión. Si desea obtener acceso a los datos de evento después de interrumpir la sesión, debe configurar la sesión para usar un destino de archivo (opción recomendada) o guardar los datos antes de detener la sesión.

Las directrices siguientes pueden servirle de ayuda a la hora de decidir qué destino va a usar.

Destino

Uso recomendado

Destino de archivo de eventos o destino ETW

Use un destino de archivo cuando se cumplan una o varias de las condiciones siguientes:

  • Desea realizar una recopilación de datos a largo plazo.

  • Desea recopilar datos de un volumen muy elevado de eventos.

  • Desea mantener los datos de evento con fines históricos.

Destino de búfer de anillo

Use un destino de búfer en anillo cuando se cumplan una o varias de las condiciones siguientes:

  • Desea realizar un seguimiento periódico de la ubicación en la que recopila los datos continuamente, pero solo desea ocuparse de los eventos más recientes (aproximadamente 2 megabytes (MB) de datos de evento). O bien desea realizar una recopilación de datos a corto plazo y ver los eventos más recientes.

  • Desea ver todos los datos de evento que se capturan en el búfer de la sesión. Dicho de otro modo, desea ver los datos sin procesar, y no la información agregada.

  • No necesita mantener los datos de evento con fines históricos.

Destino de creación de depósitos de eventos, destino de emparejamiento de eventos y destino del contador de eventos sincrónicos

Use uno de estos destinos en memoria cuando se cumplan una o varias de las condiciones siguientes:

  • Desea solucionar un determinado problema a través de un destino que pueda realizar alguna forma de análisis y agregación de los datos de evento. Por ejemplo, quizás desee saber si alguna transacción se ha quedado abierta (destino de emparejamiento de eventos) o desee ver las consultas principales por uso de la CPU que sobrepasan un período de tiempo especificado (destino de creación de depósitos de eventos).

  • Desea realizar una recopilación de datos a corto plazo.

  • No necesita mantener los datos de evento con fines históricos.

Destino de creación de depósitos de eventos

El destino de creación de depósitos de eventos agrupa las generaciones de un tipo de evento concreto en datos de evento. Un "depósito" es una agrupación de eventos cuyo recuento se realiza tomando como base una acción o columna de evento especificada. Puede utilizar el destino de creación de depósitos de eventos para solucionar problemas de rendimiento. Mediante la identificación de los eventos que se producen con más frecuencia, puede buscar "zonas activas" que indiquen la causa posible de un problema de rendimiento.

En la tabla siguiente se describen las opciones que se pueden utilizar para configurar el destino de creación de depósitos de eventos.

Opción

Valores permitidos

Descripción

slots

Un valor entero. Este valor es opcional.

Un valor especificado por el usuario que indica el número máximo de depósitos que se va a conservar. Cuando se alcanza este valor, se omiten los nuevos eventos que no pertenecen a los depósitos existentes.

filtering_event_name

Cualquier evento presente en la sesión de Extended Events. Este valor es opcional.

Un valor especificado por el usuario que se utiliza para identificar una clase de eventos. Solamente se crean depósitos de las instancias del evento especificado. Todos los demás eventos se omiten.

Si especifica este valor, debe utilizar el formato: nombreDePaquete.nombreDeEvento, por ejemplo 'sqlserver.checkpoint_end'. Puede identificar el nombre del paquete utilizando la consulta siguiente:

SELECT p.name, se.event_name
FROM sys.dm_xe_session_events se
JOIN sys.dm_xe_packages p
ON se_event_package_guid = p.guid
ORDER BY p.name, se.event_name

Si no especifica el valor filtering_event_name, source_type se debe establecer en 1 (valor predeterminado).

source_type

El tipo de objeto en el que se basa el depósito. Este valor es opcional y, si no se especifica, tiene un valor predeterminado de 1.

Puede tener uno de los siguientes valores:

  • 0 para un evento

  • 1 para una acción

source

Columna de evento o nombre de acción.

Columna de evento o nombre de acción que se usan como origen de datos.

Al especificar una columna de evento para el origen, debe especificar una columna del evento que se utiliza para el valor filtering_event_name. Puede identificar las columnas posibles utilizando la siguiente consulta:

SELECT name FROM sys.dm_xe_object_columns
WHERE object_name = '<eventname>'
AND column_type != 'readonly'

Al especificar una columna de evento para el origen, no tiene que incluir el nombre del paquete en el valor de origen.

Al especificar un nombre de acción para el origen, debe utilizar una de las acciones que se configuran para la recopilación en la sesión de eventos para la que se utiliza este destino. Para buscar posibles valores para el nombre de acción, puede consultar la columna de action_name de la vista sys.dm_xe_sesssion_event_actions.

Si utiliza un nombre de acción como origen de datos, debe especificar el valor de origen utilizando el formato: nombreDePaquete.nombreDeAcción.

En el ejemplo siguiente se muestra a un alto nivel cómo el destino de creación de depósitos de eventos recopila datos. En este ejemplo, desea utilizar el destino de creación de depósitos de eventos para realizar un recuento del número de esperas de cada tipo de espera que se han producido. Para ello, debería especificar las opciones siguientes al definir el destino de creación de depósitos de eventos:

  • filtering_event_name = 'wait_info'

  • source = 'wait_type'

  • source_type = 0 (dado que wait_type es una columna de evento)

En el escenario del ejemplo, se registran los datos siguientes para el origen wait_type.

Nombre de evento de filtrado

Valor de columna de origen

wait_info

file_io

wait_info

file_io

wait_info

network

wait_info

network

wait_info

sleep

Los valores de tipo de espera se clasificarían en tres depósitos, con los valores y recuentos de ranura siguientes:

Valor

Recuento de ranura

file_io

2

network

2

sleep

1

Para obtener más información sobre la sintaxis del destino de creación de depósitos de eventos, vea Cómo supervisar la actividad del sistema mediante Extended Events.

El destino de creación de depósitos solo conserva los datos de evento correspondientes al origen especificado. En algunos casos, es posible que los datos de evento sean demasiado grandes para conservarlos al completo, en cuyo caso se truncan los datos. Cuando se truncan los datos de eventos, el número de bytes se graba y se muestra como una salida XML.

El destino de la creación de depósitos serializa los datos a un procedimiento o programa que realiza la llamada en formato XML.

Nota

La salida de la creación de depósitos no sigue ningún esquema.

En el ejemplo siguiente se muestra el formato de salida del destino de creación de depósitos.

<Slots truncated = "0" buckets=[count]>
    <Slot count=[count] trunc=[truncated bytes]>
        <value>
        </value>
    </Slot>
</Slots>

Destino de emparejamiento de eventos

El destino de emparejamiento de eventos asocia dos eventos usando una o varias columnas de datos presentes en cada evento. Muchos eventos vienen en parejas, como por ejemplo, bloqueo y desbloqueo. Una vez emparejada una secuencia de eventos, se descartan ambos eventos. El descarte de los conjuntos asociados permite una detección fácil de adquisiciones de bloqueos que no se han liberado.

Al emplear los filtros de nivel de eventos, el destino de emparejamientos puede usarse para capturar solo eventos que no coincidan con los criterios predefinidos.

Al usar el destino de emparejamiento de eventos, se podrán elegir los dos eventos que se van a asociar, junto con una secuencia de columnas en la que realizar la asociación. Todas las columnas de esta secuencia deben ser del mismo tipo.

La siguiente tabla describe las opciones disponibles para configurar el emparejamiento de eventos.

Opción

Valores permitidos

Descripción

begin_event

Un nombre de evento presente en la sesión actual.

El nombre de evento que especifica el evento de inicio en una secuencia emparejada.

end_event

Un nombre de evento presente en la sesión actual.

El nombre de evento que especifica el evento final en una secuencia emparejada.

begin_matching_columns

Una lista ordenada y delimitada por comas de nombres de columna.

Las columnas en las que realizar la asociación.

end_matching_columns

Una lista ordenada y delimitada por comas de nombres de columna.

Las columnas en las que realizar la asociación.

begin_matching_actions

Una lista de acciones ordenada y delimitada por comas.

Las acciones en las que se debe realizar la asociación.

end_matching_actions

Una lista de acciones ordenada y delimitada por comas.

Las acciones en las que se debe realizar la asociación.

respond_to_memory_pressure

Los valores pueden ser los siguientes:

  • 0 = No responder.

  • 1 = Dejar de agregar nuevos elementos huérfanos a la lista en caso de que exista presión de memoria.

La respuesta del destino a los eventos de memoria. Si se estable en 1 y la memoria del servidor es insuficiente, se quitará la información no emparejada.

Todos los datos asociados a un evento se capturan y almacenan para futuros emparejamientos. Además, se recopilan los datos agregados por las acciones. Los datos de eventos recopilados se almacenan en la memoria, que tiene un límite finito. Este límite depende de la actividad y capacidad del sistema. En lugar de tomar la memoria máxima que se va a utilizar como un parámetro, la memoria utilizada dependerá de los recursos disponibles del sistema. Cuando no hay recursos, se quitarán los eventos no emparejados que se han conservado. Si un evento no se ha emparejado y se quita, el evento asociado aparecerá como un evento no emparejado.

El destino de emparejamiento serializa los eventos no emparejados a un formato XML. Este formato no sigue ningún esquema. El formato solo contiene dos tipos de elementos. El elemento <unpaired> es la raíz, seguido por un elemento <event> para cada evento no emparejado al que actualmente se está realizando el seguimiento. El elemento <event> contiene un atributo con el nombre del evento no emparejado.

En el siguiente ejemplo se muestra el formato de salida del destino de emparejamiento.

<unpaired truncated = "0" matchedCount = "[matched count]" memoryPressureDroppedCount = " [lost count]">
    <event name  = "[event name]" package = "[package]" id= "[event ID value]" version = "[event version]">
    <data name = "[column name]"> 
    <type name = "[column type]" package = "[type package]" /> 
    <value>[column value]</value>
    <text value>[text value]</text>>
        </data>
    </event>
</unpaired>

Seguimiento de eventos para destino Windows

Antes de utilizar el Seguimiento de eventos para Windows (ETW) como destino, se recomienda poseer conocimientos prácticos de ETW. El Seguimiento de eventos para Windows (ETW) se utiliza junto a Extended Events o como un consumidor de eventos de Extended Events. Los vínculos externos siguientes proporcionan un punto de inicio para obtener información general sobre ETW:

Extended Events es compatible con la versión de ETW de Windows XP y Windows Server 2003. El destino ETW es un destino singleton, aunque el destino se puede agregar a muchas sesiones. Si un evento se provoca en muchas sesiones, solamente se difundirá al destino ETW una vez por cada vez que se produzca. El motor de Extended Events está limitado a una sola instancia por proceso.

Nota importanteImportante

Para que el destino ETW funcione, la cuenta de inicio del servicio SQL Server debe ser miembro del grupo de usuarios del registro de rendimiento.

El proceso que hospeda el motor de Extended Events controla la configuración de los eventos presentes en una sesión ETW. El motor controla los eventos que se van a activar y las condiciones que se deben cumplir para que se active un evento.

Después de enlazar a una sesión de Extended Events, que adjunta el destino ETW por primera vez en el período de duración de un proceso, el destino ETW abre una única sesión ETW en el proveedor de SQL Server. Si ya existe una sesión ETW, el destino ETW obtiene una referencia a la sesión existente. Esta sesión ETW se comparte con todas las instancias de SQL Server en un equipo determinado. Esta sesión ETW recibe todos los eventos de las sesiones que tienen el destino ETW.

Dado que ETW necesita proveedores para habilitarse y así utilizar los eventos y encauzarlos a ETW, se habilitan todos los paquetes de Extended Events en la sesión. Cuando se activa un evento, el destino ETW envía el evento a la sesión en la que está habilitado el proveedor para el evento.

El destino ETW admite la publicación sincrónica de eventos en el subproceso que activa el evento. Sin embargo, el destino ETW no admite la publicación asincrónica de eventos.

El destino ETW no admite el control de las controladoras ETW externas como logman.exe. Para generar seguimientos de ETW, se debe crear una sesión de evento con el destino ETW. Para obtener más información, vea CREATE EVENT SESSION (Transact-SQL).

Nota

Al habilitar el destino ETW se crea una sesión ETW denominada XE_DEFAULT_ETW_SESSION. Si ya existe una sesión con el nombre XE_DEFAULT_ETW_SESSION, se usa sin modificar ninguna de las propiedades de la sesión existente. XE_DEFAULT_ETW_SESSION se comparte entre todas las instancias de SQL Server. Después de iniciar una sesión XE_DEFAULT_ETW_SESSION, debe detenerla mediante una controladora ETW, como la herramienta Logman. Por ejemplo, puede ejecutar el siguiente comando en el símbolo del sistema: logman stop XE_DEFAULT_ETW_SESSION -ets.

En la tabla siguiente se describen las opciones disponibles para configurar el destino ETW.

Opción

Valores permitidos

Descripción

default_xe_session_name

Cualquier cadena de 256 caracteres, como máximo. Este valor es opcional.

El nombre de la sesión de Extended Events. De forma predeterminada, es XESESSION0_4B7A5EC6-37EF-4d4c-81EC-13C547B9AC46.

default_etw_session_logfile_path

Cualquier cadena de 256 caracteres, como máximo. Este valor es opcional.

La ruta de acceso al archivo de registro para la sesión de Extended Events. De forma predeterminada, es %TEMP%\XEEtw.etl.

default_etw_session_logfile_size_mb

Un entero sin signo. Este valor es opcional.

El tamaño del archivo de registro, en megabytes (MB), para la sesión de Extended Events. El valor predeterminado es de 20 MB.

default_etw_session_buffer_size_kb

Un entero sin signo. Este valor es opcional.

El tamaño de búfer en memoria, en kilobytes (KB), para la sesión de Extended Events. El valor predeterminado es de 128 KB.

retries

Un entero sin signo.

El número de veces que se debe reintentar publicar el evento al subsistema de ETW antes de quitar el evento. El valor predeterminado es 0.

La configuración de los anteriores valores es opcional. El destino ETW utiliza los valores predeterminados para estos valores.

El destino ETW es responsable de:

  • Crear la sesión ETW predeterminada.

  • Registrar todos los paquetes de Extended Events con ETW. Así se asegura de que ETW no quita los eventos.

  • Administrar el flujo de eventos a ETW. El destino ETW crea un evento ETW con los datos de Extended Events y lo envía a la sesión ETW adecuada. Si el evento es mayor que el tamaño de búfer o los datos no caben en un evento ETW, ETW dividirá el evento en varios fragmentos.

  • Mantener los paquetes de Extended Events habilitados en todo momento.

ETW utiliza las siguientes ubicaciones predeterminadas de archivos:

  • El archivo de salida ETW está en %TEMP%\XEEtw.etl.

    Nota importanteImportante

    No se puede cambiar la ruta de acceso del archivo después de que se inicie la primera sesión.

  • Los archivos MOF (Managed Object Format) están en <la ruta de instalación>\Microsoft SQL Server\Shared. Para obtener más información, vea Formato de objetos administrados en MSDN.

Destino de archivo de eventos

El destino de archivo de eventos es un destino asincrónico que escribe búferes completos en el disco. Crea dos tipos de archivos, de registro y de metadatos. El archivo de metadatos describe el contenido de los eventos presentes en el archivo de registro de salida de destino. Esto permite un análisis correcto de todos los eventos del archivo de registro, así como de los datos de acciones asociados con cada uno de los eventos.

Para usar este destino, debe especificar el nombre de la ubicación del archivo de registro y del archivo de metadatos. Las demás opciones de configuración, como el tamaño del archivo y las características de crecimiento, son opcionales.

En la tabla siguiente se describen las opciones disponibles para configurar el destino de archivo de eventos.

Opción

Valores permitidos

Descripción

filename

Cualquier cadena de 260 caracteres, como máximo. Este valor es necesario.

La ubicación y el nombre del archivo.

Puede utilizar cualquier extensión de nombre de archivo.

max_file_size

Cualquier entero de 64 bits. Este valor es opcional.

El tamaño máximo del archivo en megabytes (MB). Si no se especifica max_file_size, el archivo crecerá hasta que se llene el disco. El tamaño de archivo predeterminado es 1GB.

max_file_size debe ser mayor que el tamaño actual de los búferes de sesión. Si no lo es, el destino del archivo no podrá inicializarse y se notificará que max_file_size no es válido. Para ver el tamaño actual de los búferes, consulte la columna buffer_size en la vista de administración dinámica sys.dm_xe_sessions.

Si el tamaño de archivo predeterminado es menor que el tamaño de búfer de la sesión, recomendamos establecer max_file_size en el valor especificado en la columna max_memory de la vista del catálogo sys.server_event_sessions.

Cuando max_file_size se establece en un tamaño mayor que el de los búferes de la sesión, se puede redondear hacia abajo al múltiplo más próximo del tamaño de búfer de la sesión. De esta forma puede crearse un archivo de destino que sea menor que el valor especificado para max_file_size. Por ejemplo, si el tamaño del búfer es de 100 MB y max_file_size está establecido en 150 MB, el tamaño de archivo resultante se redondea hacia abajo a 100 MB porque un segundo búfer no cabría en los 50 MB de espacio restantes.

Si el tamaño de archivo predeterminado es menor que el tamaño de búfer de la sesión, recomendamos establecer max_file_size en el valor de la columna max_memory de la vista del catálogo sys.server_event_sessions.

max_rollover_files

Cualquier entero de 32 bits. Este valor es opcional.

El número máximo de archivos que se desean conservar en el sistema de archivos.

increment

Cualquier entero de 32 bits. Este valor es opcional.

El crecimiento incremental, en megabytes (MB), para el archivo. Si no se especifica, el valor predeterminado para el incremento es dos veces el tamaño del búfer de la sesión.

metadatafile

Cualquier cadena de 260 caracteres, como máximo. Este valor es necesario.

La ubicación y el nombre de los metadatos para el archivo.

La primera vez que se crea un destino de archivo, al nombre de archivo que especifique se le anexa 0 y un valor entero largo. El valor entero se calcula como el número de milisegundos entre el 1 de enero de 1600 y la fecha y la hora en que se crea el archivo. Los archivos de sustitución incremental siguientes también utilizan este formato. Al examinar el valor del entero largo, puede determinar el archivo más actual. En el ejemplo siguiente se muestra cómo se denominan los archivos de sustitución incremental en un escenario en el que la opción de nombre de archivo se especifica como C:\OutputFiles\MyOutput.xel:

  • primer archivo creado - C:\OutputFiles\MyOutput_0_128500310259380000.xel

  • primer archivo de sustitución incremental - C:\OutputFiles\MyOutput_0_128505831770890000.xel

  • segundo archivo de sustitución incremental - C:\OutputFiles\MyOutput_0_132410772966237000.xel

Destino del contador de eventos sincrónicos

El destino del contador de eventos sincrónicos cuenta todos los eventos que se desencadenan durante una sesión de Extended Events. Si utiliza el destino del contador de eventos sincrónicos, puede obtener información sobre las características de la carga de trabajo sin agregar la sobrecarga que supone una recopilación de eventos completa. Este destino no tiene ningún parámetro personalizable.

En el ejemplo siguiente se muestra la salida del destino del contador de eventos sincrónicos.

<CounterTarget truncated = "0">
  <Packages>
    <Package name = "[package name]">
      <Event name = "[event name]" count = "[number]" />
    </Package>
  </Packages>
</CounterTarget>

Destino de búfer de anillo

El destino de búfer de anillo guarda datos de eventos en la memoria durante un corto espacio de tiempo. Este destino puede administrar los eventos de uno de los dos modos siguientes.

  • El primer modo es un orden FIFO (First In, First Out; primero en entrar, primero en salir) estricto, en el que el evento más antiguo se descarta cuando se usa toda la memoria asignada al destino. En este modo (valor predeterminado), la opción occurrence_number se establece en 0.

  • El segundo modo es un orden FIFO por evento, en el que se conserva un número determinado de eventos de cada tipo. En este modo, los eventos más antiguos de cada tipo se descartan cuando se usa toda la memoria asignada al destino. Puede configurar la opción occurrence_number para especificar el número de eventos de cada tipo que se desea conservar.

En la tabla siguiente se describen las opciones disponibles para configurar el destino de búfer de anillo.

Opción

Valores permitidos

Descripción

default_memory

Cualquier entero de 32 bits. Este valor es opcional.

La cantidad de memoria máxima, en kilobytes (KB), que se va a usar. Los eventos existentes se quitan al alcanzar este valor.

occurrence_number

Uno de los valores siguientes:

  • 0 (valor predeterminado) = El evento más antiguo se descarta cuando se usa toda la memoria asignada al destino.

  • Un número entero de 32 bits = El número de eventos de cada tipo que se conserva antes de descartarse siguiendo un orden FIFO por evento.

Este valor es opcional.

Modo FIFO que se va a usar y, si se establece en un valor mayor que 0, el número preferido de eventos de cada tipo que se desea conservar en el búfer.

En el ejemplo siguiente se ilustra la salida del destino de búfer de anillo.

<RingBufferTarget eventsPerSec="" processingTime="" totalEventsProcessed="" eventCount="" droppedCount="" memoryUsed="">
 <event name="" package="" id="" version="" timestamp="">
    <data name="">
      <type name="" package="" />
      <value></value>
      <text></text>
    </data>
    <action name="" package="">
      <type name="" package="" />
      <value></value>
      <text></text>
    </action>
  </event>
</RingBufferTarget>