Introducción a SQL Server Extended Events

SQL Server Extended Events (Extended Events) es un sistema de control de eventos general para los sistemas del servidor. La infraestructura de Extended Events admite la correlación de datos de SQL Server y bajo ciertas condiciones, la correlación de datos de las aplicaciones de base de datos y sistema operativo. En este último caso, el resultado de Extended Events debe dirigirse al Seguimiento de eventos para Windows (ETW) para correlacionar los datos de eventos con los datos de eventos de la aplicación o del sistema operativo.

Todas las aplicaciones tienen puntos de ejecución que son útiles tanto dentro como fuera de una aplicación. Dentro de la aplicación, puede ponerse en cola el procesamiento asincrónico mediante información recopilada durante la ejecución inicial de una tarea. Fuera de la aplicación, los puntos de ejecución proporcionan información a las utilidades de supervisión sobre las características de rendimiento y el comportamiento de la aplicación supervisada.

Extended Events admite la utilización de datos de eventos fuera de un proceso. Normalmente, estos datos son utilizados por:

  • Herramientas de seguimiento, como Monitor de sistema y SQL Trace.

  • Herramientas de registro, como el registro de eventos de Windows o el registro de errores de SQL Server.

  • Usuarios que administran un producto o desarrollan aplicaciones de un producto.

Características y diseño de Extended Events

Los aspectos clave del diseño de Extended Events son:

  • El motor de Extended Events es independiente del evento, lo que permite al motor enlazar cualquier evento a cualquier destino ya que el motor no está limitado por el contenido del evento. Para obtener más información sobre el motor de Extended Events, vea Motor de SQL Server Extended Events.

  • Los eventos están separados de los consumidores de eventos, llamados destinos en Extended Events. Esto significa que cualquier destino puede recibir cualquier evento. Además, cualquier evento generado puede ser automáticamente utilizado por el destino, que puede registrar o proporcionar el contexto adicional del evento. Para obtener más información, vea Destinos de SQL Server Extended Events.

  • Los eventos son diferentes de la acción que se lleva a cabo cuando se activa un evento. El resultado es que puede asociarse cualquier acción a cualquier evento.

  • Los predicados pueden filtrar de forma dinámica la activación de eventos, lo que se suma a la flexibilidad de la infraestructura de Extended Events. Para obtener más información, vea Paquetes de SQL Server Extended Events.

Extended Events puede generar datos de eventos de forma sincrónica (y procesar de forma asincrónica dichos datos) lo que proporciona una solución flexible para el control de eventos. Además, Extended Events proporciona las características siguientes:

  • Un planteamiento unificado para controlar los eventos en todo el sistema de servidor, a la vez que habilita a los usuarios para aislar eventos específicos con el objeto de solucionar problemas.

  • Integración y compatibilidad con las herramientas ETW existentes.

  • Un mecanismo completamente configurable de control de eventos basado en Transact-SQL.

  • La capacidad para supervisar dinámicamente los procesos activos, ejerciendo al mismo tiempo el mínimo efecto sobre dichos procesos.

Usar Extended Events con ETW

Si desea utilizar Extended Events para poner en correlación los datos de las aplicaciones de base de datos y del sistema operativo, se recomienda tener conocimientos prácticos de ETW. ETW se puede utilizar junto con Extended Events o como un consumidor de eventos de Extended Events. En los temas siguientes se proporciona un punto de inicio para obtener información general sobre ETW:

Escenarios para el uso de Extended Events

Puede usarse Extended Events en una amplia variedad de escenarios de supervisión y solución de problemas. Los escenarios siguientes muestran algunas de las situaciones donde Extended Events puede proporcionar valiosa información para resolver problemas en áreas tales como:

  • Solucionar problemas del recorte del espacio de trabajo.

  • Solucionar problemas del uso excesivo de CPU.

  • Solucionar problemas de los interbloqueos.

  • Correlacionar la actividad de solicitudes con los registros ETW de Windows.

Solucionar problemas del recorte del espacio de trabajo

Se están experimentando problemas de rendimiento en el servidor de producción, lo que provoca que las aplicaciones cliente agoten el tiempo de espera. Estos problemas son transitorios ya que el rendimiento vuelve a niveles normales después de 10 o 15 minutos.

Después de examinar el registro de errores de SQL Server se encuentran mensajes de error similares a los siguientes:

"Se ha paginado una parte significativa del proceso de servidor. Esto puede causar un descenso del rendimiento. Duración: 300 segundos. Uso actual de la memoria 34%."

"La escucha IOCP no está rindiendo."

Nota

IOCP significa "puerto de terminación de E/S". Este puerto da respuesta a las solicitudes de los usuarios a través de la red. El mensaje indica que el puerto de terminación ha estado bloqueado durante el último minuto.

Se sospecha que SQL Server no responde lo suficientemente rápido a la presión de memoria en el servidor. Al comprobar la memoria con Administrador de tareas se constata que la memoria disponible en el servidor es más que suficiente. Se intenta conectar a la base de datos de SQL Server Management Studio, pero se agota el tiempo de espera de conexión. Puede conectarse al servidor con el comando SQLCMD 0 A ejecutado desde el símbolo del sistema de Windows. De este modo se abre una sesión en la conexión de administrador dedicada.

Se decide utilizar Extended Events para obtener más información. Se crea una sesión de Extended Events que:

  • Agrega eventos para la indicación de la memoria de sistema y el cambio de la memoria del servidor total.

  • Dirige el resultado a ETW. Este resultado se escribirá en un archivo que se crea en una unidad de disco no utilizada por el archivo de paginación ni por los archivos de base de datos de SQL Server.

En el símbolo del sistema de Windows se ejecuta una instrucción para habilitar un seguimiento ETW del kernel de Windows con todos los eventos de memoria. Se ejecutan durante varios minutos ambos seguimientos y, a continuación, se cierra la sesión de Extended Events y el seguimiento del kernel de Windows.

Se utiliza tracerpt.exe para correlacionar el seguimiento de Windows y el seguimiento ETW de SQL Server. Se busca un evento que indique que se estableció una notificación baja de la memoria de sistema, pero no se encuentra. En cambio, se ve una gran cantidad de errores de página de todos los procesos del servidor. Al examinar los eventos justo antes de la paginación, se encuentra con que se habían reducido los espacios de trabajo de todos los procesos en respuesta a una solicitud de asignación de memoria de un controlador.

Solucionar problemas del uso excesivo de CPU

Se está investigando el uso excesivo de CPU del sistema de producción. Se utilizan varias Vistas de administración dinámica (DMV) para determinar si el uso de CPU puede atribuirse a las consultas ejecutadas en el sistema. El análisis indica que la mayoría de las consultas son consultas ad hoc de usuario. La información obtenida de los DMV no es suficiente para diagnosticar el problema.

Se crea una sesión de Extended Events que:

  • Habilita eventos para la terminación de instrucciones con predicados que especifican el umbral de CPU.

  • Tiene una acción para recopilar únicamente el plan de consulta cuando se activa el evento.

  • Escribe todos los datos recopilados en un archivo. Este archivo está en una unidad que no contiene ningún archivo de registro ni de base de datos.

Después de iniciar la sesión de Extended Events, se examina el resultado y se puede determinar que la causa del problema de CPU es una conversión de tipo de datos entre dos tablas frecuentemente combinadas.

Solucionar problemas de los interbloqueos

Se están recibiendo informes por parte de los usuarios que indican que ciertas aplicaciones devuelven errores de interbloqueo. Para maximizar la efectividad para solucionar este problema, se decide centrar el análisis en los interbloqueos más frecuentes. Se crea una sesión de Extended Events que:

  • Configura el seguimiento de eventos de interbloqueo para la sesión.

  • Especifica un destino que agregará en función de un identificador para el interbloqueo.

Se ejecuta la sesión de Extended Events y después de notificar los interbloqueos adicionales se puede obtener información agregada del interbloqueo junto con el gráfico de interbloqueo XML completo para cada fuente. Con esta información se podrán señalar los interbloqueos más comunes y buscar una solución.

Correlacionar la actividad de solicitudes con los registros ETW de Windows

Se está solucionando el problema de una ralentización de aplicaciones en el servidor de producción y se está cerca de encontrar la causa de los grandes tiempos de lectura del disco. Se crea una sesión de Extended Events que:

  • Agrega las lecturas del disco como un evento de sesión.

  • Envía los datos recopilados a ETW.

Después de iniciar la sesión de Extended Events, se ejecuta un seguimiento ETW del kernel de Windows. Al cabo de 10 minutos, se detienen ambas sesiones.

Se utiliza tracerpt.exe para combinar el seguimiento de Windows y el seguimiento ETW de SQL. A partir de este seguimiento combinado es posible correlacionar y realizar el seguimiento de las solicitudes de lectura de SQL Server al kernel de Windows. Este análisis indica un gran retraso antes de que la solicitud de E/S se devuelva a SQL Server. Con esta información se puede determinar de forma concluyente que el problema de E/S reside en la ruta de acceso física de E/S.