SQL Server 2008

Avanzado de solución de problemas con eventos de totales

Paul S. Randal

 

En resumen:

  • ¿Por qué solución de problemas es necesario
  • Solución de problemas de herramientas de SQL Server
  • Información general y la arquitectura de los eventos total
  • Utilizar eventos totales

Contenido

Solución de problemas en SQL Server 2005
Eventos extendidos
Consideraciones de rendimiento
Duración de un evento
Utilizar eventos totales
La sesión de eventos totales system_health
Ajustar hacia arriba

Administradores de bases de datos de SQL Server el mundo a través de tiene un problema que nunca parece desaparecer: solución de problemas, con la inmensa mayoría de solución de problemas que se realiza para encontrar un problema de rendimiento de algún tipo.Incluso más cuidadosamente diseñado y sistema de aplicaciones probadas se experiencia de los cambios en el tiempo que puede conducir a problemas de rendimiento importantes.

Por ejemplo, la carga de trabajo puede cambiar (por ejemplo el número de usuarios simultáneos, las consultas que se están llevando a cabo e informes de fin de mes nuevo está llevando a cabo), puede aumentar el volumen de datos que se está procesando, puede cambiar el hardware en el que se ejecuta el sistema (tales como el número de núcleos de procesador, cantidad de memoria del servidor disponible y capacidad de subsistema de E/s), y podrían introducirse nuevos cargas de trabajo simultáneas (base de, como la duplicación transaccional, datos reflejo y cambiar la captura de datos).

Vídeo

Paul Randal, muestra cómo se puede utilizar la nueva funcionalidad total eventos en SQL Server 2008 para la supervisión y solución de problemas.

Pero los no los problemas sólo que se producen.Al diseñar y probar los sistemas de aplicaciones, problemas inesperados son a menudo relacionados con el diseño, que a continuación, también requieren solución de problemas.Obviamente, independientemente de cuando en el ciclo de vida de aplicación se detecta el problema, solución de problemas debe realizarse para identificar la causa y una solución.

Un sistema de aplicación compleja tendrá muchos componentes de hardware y software que tenga que ser analizado, pero la que estoy preocuparse es SQL Server.Sin considerar el rendimiento de diversos solucionar problemas de las metodologías (que podrían ser una conversación allá del ámbito de este artículo), ¿cuáles son las herramientas que necesarias para solucionar problemas de SQL Server?

Solución de problemas en SQL Server 2005

A través de las últimos versiones algunas de SQL Server, la selección de las herramientas disponibles para la solución de problemas de rendimiento ha ampliado considerablemente.SQL Server siempre ha contado numerosos comandos DBCCs (comando de consola de base de datos) disponibles para proporcionar una perspectiva de lo que sucede en las distintas partes del motor de base de datos.Además, es el Analizador de SQL Server y mediante programación utilizando el mecanismo de rastreo de SQL subyacente.

Aunque SQL Server ha ofrecido continuamente avances para la solución de problemas, estas opciones tienen algunos problemas.POST-Processing de DBCC resultado es el difícil, que necesite para volcar los resultados en una tabla temporal para poder llevar a cabo algo con ellas.Y ejecuta traza de SQL y el analizador puede provocar una degradación del rendimiento cuando mal configurado (como el seguimiento bloquear todos los: adquisición y bloquear: emitido eventos en un sistema ocupado y olvidarse de filtrar por DatabaseId y IdObjeto columnas el evento).La captura de pantalla en la figura 1 muestra un cuadro de diálogo que se utiliza para configurar un filtro para una nueva traza.

fig01.gif

Figura 1 configurar un filtro en el Analizador de SQL Server 2008

SQL Server 2005 agrega las vistas de administración dinámica y las funciones (colectivamente se denomina DMV) como una manera de obtener la información fuera del motor de base de datos.DMV había reemplazado algunos comandos de DBCC, las tablas del sistema y procedimientos almacenados y expone muchas nuevas áreas del funcionamiento del motor.Estas DMV es comandos eficaces que son composable, pueden utilizarse en instrucciones T-SQL complejas que filtrar y proceso posterior según los resultados DMV.

Por ejemplo, el código mostrado en la figura 2 devuelve simplemente la fragmentación y densidad de página (ambos redondeados) de los niveles de hojas de todos los índices en una base de datos, con un filtro en el nivel de fragmentación.Esto no se pudo realizar fácilmente mediante el comando DBCC SHOWCONTIG anterior.(Para obtener más información en DMV, consulte"Las vistas dinámicas de administración y funciones (Transact-SQL)." Además, SQL Server 2005 agrega una serie de otras características que podrían utilizarse para la solución de problemas, incluidos los desencadenadores DDL (lenguaje de definición de datos) y las notificaciones de eventos.

La Figura 2 utilizar DMV para los resultados eficaces

SELECT
  OBJECT_NAME (ips.[object_id]) AS 'Object Name',
  si.name AS 'Index Name',
  ROUND (ips.avg_fragmentation_in_percent, 2) AS 'Fragmentation',
  ips.page_count AS 'Pages',
  ROUND (ips.avg_page_space_used_in_percent, 2) AS 'Page Density'
FROM sys.dm_db_index_physical_stats (
  DB_ID ('SQLskillsDB'), NULL, NULL, NULL, 'DETAILED') ips
CROSS APPLY sys.indexes si
WHERE
  si.object_id = ips.object_id
  AND si.index_id = ips.index_id
  AND ips.index_level = 0 -- only the leaf level
  AND ips.avg_fragmentation_in_percent > 10; -- filter on fragmentation
GO

Distintos equipos dentro de Microsoft también han proporcionado el rendimiento de útil herramientas para solucionar problemas, como la Utilidad de SQLdiag, el Utilidades de RML para SQL Server, el Informes de escritorio de rendimiento de SQL Server 2005, y DMVStats. Hay también un Proveedor de seguimiento para Windows (ETW) de eventos para SQL Server 2005, que permite eventos de traza de SQL para integrarse con los eventos de otras partes de Windows.

Aunque SQL Server 2005 realizado grandes progresos para aumentar la capacidad de los administradores de bases de datos para solucionar el motor de base de datos, todavía había muchas situaciones que estaban casi imposible para los administradores solucionar problemas de forma eficaz. En un ejemplo normalmente citado, algunas consultas utilizan cantidades excesivas de recursos de CPU, pero las DMV no proporcionar información suficiente para señalar que consultas ad hoc son los culprits. Pero a diferencia de SQL Server 2005, SQL Server 2008 es capaz de solucionar estas limitaciones con una nueva característica denominada eventos total del servidor SQL.

Eventos extendidos

Las capacidades del sistema total eventos son mucho más allá de los anteriores eventos de seguimiento y solucionar problemas mecanismo que SQL Server ha proporcionado. En mi opinión, los elementos destacados del sistema de eventos extendidos son los siguientes:

  • Eventos desencadena sincrónicamente, pero se pueden procesar de forma sincrónica o asincrónica.
  • Cualquier destino puede consumir cualquier evento y cualquier acción se puede emparejada con ningún evento, lo que permite un sistema de supervisión detallado.
  • Predicados "inteligentes" permiten crear reglas complejas con lógica booleana.
  • Puede tener control completo sobre las sesiones de eventos de total con Transact-SQL.
  • Puede supervisar código crítico de rendimiento sin afectar al rendimiento.

Antes de vaya en, le dedique unos instantes para definir parte de la terminología nueva.

evento Un evento es un punto definido en el código. Algunos ejemplos son el punto en que una instrucción de T-SQL terminado de ejecutarse o el punto en el que se complete la adquirir un bloqueo. Cada evento tiene una carga definida (el conjunto de columnas que se devuelven por el suceso) y se define mediante el modelo de ETW (donde cada evento devuelve un canal y la palabra clave como parte de la carga) para permitir la integración con ETW. SQL Server 2008 inicialmente se incluía con 254 eventos definidos y más se espera que se va a agregar a lo largo del tiempo.

Puede ver la lista de eventos definidos mediante el siguiente código:

SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
  AND xo.[object_type] = 'event'
ORDER BY xp.[name];

Y puede encontrar la carga para un evento específico mediante este código:

SELECT * FROM sys.dm_xe_object_columns
  WHERE [object_name] = 'sql_statement_completed';
GO

Observe que el sistema de eventos extendidos tiene un conjunto completo de DMV informativos que describen todos los eventos, objetivos y así sucesivamente. Para obtener más información, vea" Extendidos de las vistas dinámicas de administración de eventos de SQL Server."

predicados Predicados son el método utilizado para filtrar los eventos con un conjunto de reglas de lógicas antes de que se consumen los eventos. Predicados pueden ser sencillas, como comprobar que una de las columnas devuelve en el caso de carga es un valor determinado (por ejemplo, filtrados adquirido el bloqueo eventos por IDENTIFICADOR de objeto).

También proporcionan algunas capacidades de avanzadas, como recuento de número de veces que se ha producido un evento específico durante la sesión y sólo permitir que el evento para ser utilizado después de una repetición o actualizar dinámicamente el predicado para suprimir el consumo de eventos que contiene datos similares.

Los predicados se pueden escribir mediante lógica booleana para que short-circuit tan pronto como sea posible. Esto permite la cantidad mínima de procesamiento sincrónico que para se debe realizar antes de determinar si el evento se va a ser utilizado o no.

acción Una acción es un conjunto de comandos que se realizan sincrónicamente antes de que se consume un evento. Cualquier acción puede vincularse a cualquier evento. Normalmente recopilan más datos anexar a la carga de evento (como una pila de T-SQL o un plan de ejecución de consultas) o realizar algún cálculo que se anexa a la carga de evento.

Como las acciones pueden ser caras, las acciones para un evento sólo realizan después ha evaluado ningún predicado, no habría ningún punto para sincrónicamente realizar una acción si, a continuación, se determina que no se podría consumir el evento. Puede encontrar una lista de acciones predefinidas utilizando el código siguiente:

SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
  AND xo.[object_type] = 'action'
ORDER BY xp.[name];

destino Un destino simplemente proporciona forma a consumir eventos, y cualquier destino puede consumir cualquier evento (o al menos desechar, si no hay nada para el destino realizar, tal como un destino de auditoría obteniendo un evento de auditoría sean). Destinos pueden consumir eventos de forma sincrónica (por instancia, el código que desencadena el evento espera el evento que se van a consumir) o asincrónica.

Está diseñado para el rango de consumidores simples, como archivos de evento y búferes de anillo, a los consumidores más complicados que tienen la capacidad para realizar la asociación de evento. Puede encontrar la lista de destinos disponibles utilizando el código siguiente:

SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
  AND xo.[object_type] = 'target'
ORDER BY xp.[name];

Para obtener más detalles en destinos, consulte" Extendidos los destinos de eventos de SQL Server."

paquete Un paquete es un contenedor que define objetos de eventos extendidos (como los eventos, acciones y los destinos). Un paquete está contenido dentro del módulo (como un archivo ejecutable o un archivo DLL) describe, tal como se muestra en la figura 3 .

La figura 3 la relación betweenmodules, paquetes y objetos ExtendedEvents

Cuando un paquete se registra con el motor de total de eventos, todos los objetos definidos por el, a continuación, están disponibles para su uso. Para obtener más información sobre paquetes y una lista completa de terminología del total de eventos, vea" Extendidos paquetes de eventos de SQL Server."

sesión Una sesión es una manera de juntos vincular objetos de eventos de total para el procesamiento, un evento con una acción para el consumo por un destino. Una sesión puede vincular objetos de los paquetes de registrado, y cualquier número de sesiones puede usar el mismo evento, acción y así sucesivamente. Puede ver qué sesiones de eventos extendidos se definen mediante el siguiente código:

SELECT * FROM sys.dm_xe_sessions;
Go

Sesiones se crean, eliminan modifican, detiene y iniciadas mediante comandos T-SQL. Como puede imaginar, esto ofrece mucha flexibilidad, incluso la capacidad para modificar dinámicamente una sesión basada en programación análisis de datos que se va a capturados por la sesión de sí mismo. Para obtener más información en las sesiones, consulte" Extendidos sesiones de eventos de SQL Server."

Consideraciones de rendimiento

Al colocar una sesión de total de eventos mediante CREATE EVENT SESSION juntos, hay algunas opciones que debe tener cuidado de configurar correctamente, como sin darse cuenta pueden afectar al rendimiento. La primera decisión es si desea que los eventos consumidos sincrónica o asincrónica. Y como era de esperar, destinos sincrónicos tienen efecto mayor en el rendimiento del código supervisado que destinos asincrónicos.

Como se explicó anteriormente, cuando un evento se consume sincrónica, el código que desencadena el evento tiene que esperar hasta que se ha consumido el evento. Obviamente, si el consumo de los eventos es un proceso complicado, esto puede ralentizar el código.

Por ejemplo, en un sistema ocupado dando servicio a miles de pequeñas transacciones por segundo, sincrónica consumo de un evento sql_statement_completed con una acción para capturar una consulta plan es muy probable que tendrá un impacto negativo en el rendimiento. Además, recuerde que predicados siempre se ejecutan sincrónicamente, por lo que debe tener cuidado no crear predicados demasiado complejos para los eventos desencadenados por el código crítico de rendimiento.

Por otro lado, se puede forzadas a consumir eventos sincrónicamente. Para contar las apariciones de un evento determinado, la forma más sencilla de hacerlo probablemente será utilizar el destino synchronous_event_counter.

La segunda cosa que debe tener en cuenta es cómo configurar el almacenamiento en búfer eventos si decide utilizar destinos asincrónicos. La cantidad predeterminada de memoria disponible para el almacenamiento en búfer del evento es 4 MB. La latencia de envío predeterminada entre un evento se desencadena y posteriormente, utilizado por un destino es 30 segundos. Si, por ejemplo, desea generar algunas estadísticas de eventos cada 10 segundos, a continuación, debe ajustar la latencia.

Ligado a la configuración de almacenamiento en búfer de eventos es cómo desea realizar la partición la memoria utilizada para los eventos del búfer. El valor predeterminado es crear un conjunto de búferes de la instancia completa. En SMP (multiprocesador simétrico) y equipos NUMA (Non-uniforme Memory Access), esto puede provocar problemas de rendimiento con procesadores de tener que esperar para tener acceso a la memoria.

La tercera consideración es cómo desea controlar la pérdida de eventos. Cuando se define la sesión de eventos de total, puede especificar si los eventos pueden sea "pérdidos". Esto significa que si no hay suficiente memoria para un evento de búfer, se simplemente descarta. El valor predeterminado es permitir eventos único para eliminarse, pero también puede permitir que los búferes completos de eventos que se pierda (para las sesiones en los búferes de evento llenan muy rápidamente) o incluso especificar que no hay eventos pueden perderse.

Esta última opción debe utilizarse con gran precaución, tal como fuerza el código que desencadena el evento para esperar hasta que hay memoria de búfer para almacenar el evento. Esta opción casi siempre tiene un efecto perjudicial en el rendimiento. Tenga en cuenta que si establece esta opción para accidentalmente en, el servidor debe permanecer responde para poder desactivar la configuración.

Normalmente, deseará tener en cuenta estos valores juntos. Y no hay realmente una práctica recomendada general que puede dar excepto para asegúrese de que se poner pensamiento en ellos o puede ejecutar en problemas de rendimiento. Puede encontrar más información acerca de estas opciones en" CREATE SESSION CASO (T-SQL)".

Duración de un evento

Una vez se ha definido la sesión de eventos extendidos y iniciado, procesamiento continúa como normal hasta que el código que se está supervisando procede a través de un evento. Los pasos seguidos por el sistema de eventos de total se resumen en la figura 4 . Los pasos son los siguientes:

  1. Se realiza una comprobación para ver si las sesiones de total de eventos están supervisando el evento. Si no, control se devuelve al código que contiene el evento, y continúa el procesamiento.
  2. Se determina la carga de evento, y se recopila toda la información necesaria en la memoria, en otras palabras, se construye la carga de evento.
  3. Si los predicados se han definido para el evento, se ejecutan. En este momento, el resultado del predicado puede ser que el evento no debe ser utilizado. Si éste es el caso, control se devuelve al código que contiene el evento y continúa el procesamiento.
  4. Ahora el sistema sabe que el evento se consumir, por lo que ejecuta las acciones vinculadas a los eventos. El evento ahora tiene una carga completa y está listo para consumo.
  5. El evento se sirve a destinos sincrónicos, si hay alguno.
  6. Si los destinos asincrónicos existen, el evento en el búfer para el procesamiento posterior.
  7. Control se devuelve al código que contiene el evento y continúa el procesamiento.

sqlfig04.gif

La figura 4 la vida de un evento eventos extendidos (haga clic en la imagen de una vista más grande)

Como mencioné anteriormente, debe tener cuidado al crear una sesión de eventos para que afecten acciones sincrónicas o el almacenamiento en búfer para destinos asincrónicos no se al rendimiento del código que se está supervisando.

Utilizar eventos totales

Los libros en pantalla de SQL Server 2008 incluye dos ejemplos del uso total de eventos: " Cómo: Determinar qué consultas participación bloqueos"y" Cómo: Buscar los objetos con los bloqueos la mayor parte de captura en ellos."

Me gustaría recorrer un ejemplo de configuración de una sesión de eventos extendidos y analizar los resultados. Como aprendieron cuando inicia mediante total eventos en tiempo de ejecución de 2007, unir una sesión simple es muy fácil (mediante instrucciones DDL de T-SQL sencillas), pero analizar los resultados es no trivial.

Los resultados se presentan en XML, que inicialmente sorprender me antes de que me di cuenta el gran número de las posibles combinaciones de eventos y acciones que se puede recopilar en una única sesión pensado realmente no había ninguna otra opción viable para almacenar un esquema extensible.

Ahora, era un desarrollador en el equipo del motor de almacenamiento de SQL Server durante muchos años y considere yo mismo un programador de C, C++ y ensamblado muy competente, pero tenía que dedicar unas pocas horas saber el código necesario para extraer campos de la carga de evento mediante programación de los datos XML. Estoy no intentando deshacernos, del uso de eventos de total; en su lugar, me sólo advertencia, que si no está usado a trabajar con datos XML, prepárese para un bit de una curva de aprendizaje antes de ver los resultados.

Este es mi escenario: soy un administrador de bases de datos utilizando la función de administrador de recursos de SQL Server 2008 para recinto de seguridad diversos grupos de mi compañía en uno de los servidores de producción. Han creado dos grupos de recursos regulador de recursos, desarrollo y mercadotecnia, para representar cada equipo mediante dicho servidor. Administrador de recursos permite limitar la CPU de cada grupo y uso de memoria de ejecución consulta, pero no la cantidad de recursos de E/s que utilizan. Por lo tanto, me gustaría establecer un mecanismo de informe que ayuda a mí amortize el costo de actualización a una nueva SAN (red de área de almacenamiento) por cada equipo para uso de E/s en ese servidor de facturación.

Asumo que la manera más sencilla para desencadenar captura información de E/s es cuando finalice cualquier instrucción de T-SQL y sé que hay un evento denominado sql_statement_completed en el paquete package0. ¿Por lo que qué datos recopilados en el evento carga?

El siguiente código en ejecución proporcionará me la lista de todos los datos, ambos incluidos lecturas y escrituras:

SELECT [name] FROM sys.dm_xe_object_columns
  WHERE [object_name] = 'sql_statement_completed';
GO

No creo que estos son lecturas físicas y escribe cuando se leen o escritas en disco, en lugar de sólo en memoria en el grupo de búferes datos), pero dará me una idea de la proporción de recursos de E/s se utilizados por cada equipo.

Ahora necesito averiguar qué equipo ejecuta una instrucción de T-SQL determinada y, por lo que se necesita una acción que se indican me que. Este código en ejecución me ofrece una lista de todas las acciones que puede realizar cuando se desencadene el evento, incluido uno recopila el session_resource_pool_id en el paquete de sqlserver:

SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
   AND xo.[object_type] = 'action'
ORDER BY xp.[name];

Puede obtener la lista de grupos de recursos ha definido para el administrador de recursos y correlacionar con los identificadores recopilados por la sesión de eventos de total. Ahora estoy listo para definir la sesión. Tenga en cuenta que cuando ejecuta este código, lo primero comprobará si existe una sesión de eventos con el mismo nombre. Si encuentra uno con el mismo nombre, coloque la sesión. Este es el código:

IF EXISTS (
SELECT * FROM sys.server_event_sessions
    WHERE name = 'MonitorIO')
DROP EVENT SESSION MonitorIO ON SERVER;
GO

CREATE EVENT SESSION MonitorIO ON SERVER
ADD EVENT sqlserver.sql_statement_completed
  (ACTION (sqlserver.session_resource_pool_id))
ADD TARGET package0.ring_buffer;
GO

A continuación, crea una nueva sesión con un solo evento, sql_statement_completed, que también se realiza la acción session_resource_pool_id, inicio de sesión todo un búfer mientras todavía estoy prototipos. (En el entorno de producción, se lo más probable es que elija utilizar un destino de archivo asincrónica).

Para iniciar la sesión, tendrá que ejecutar este código:

ALTER EVENT SESSION MonitorIO ON SERVER
STATE = START;
GO

Ahora es hacia arriba y ejecución.

Después de faking alguna actividad de los equipos de marketing y desarrollo, estoy listo para analizar los resultados de la sesión. Este código extraen los datos del búfer:

SELECT CAST(xest.target_data AS XML) StatementData
  FROM sys.dm_xe_session_targets xest
JOIN sys.dm_xe_sessions xes ON
  xes.address = xest.event_session_address
WHERE xest.target_name = 'ring_buffer'
  AND xes.name = 'MonitorIO';
GO

Sin embargo, extrae los datos como un valor XML grande. Si desea dividirla más, puede utilizar el código que se muestra en la figura 5 .

La figura 5 interrupción de los datos XML

SELECT
  Data2.Results.value ('(data/.)[6]', 'bigint') AS Reads,
  Data2.Results.value ('(data/.)[7]', 'bigint') AS Writes,
  Data2.Results.value ('(action/.)[1]', 'int') AS ResourcePoolID
FROM
(SELECT CAST(xest.target_data AS XML) StatementData
  FROM sys.dm_xe_session_targets xest
  JOIN sys.dm_xe_sessions xes ON
    xes.address = xest.event_session_address
  WHERE xest.target_name = 'ring_buffer'
    AND xes.name = 'MonitorIO') Statements
CROSS APPLY StatementData.nodes ('//RingBufferTarget/event') AS Data2 (Results);
GO

Esto funciona, pero proporciona una línea de salida para cada evento que se captura. Eso no es un formato increíble más me gustaría obtener resultados agregados, por lo que decidió usar una tabla derivada, como puede ver en la figura 6 .

Obtención de la figura 6 agregados salida

SELECT DT.ResourcePoolID,
  SUM (DT.Reads) as TotalReads,
  SUM (DT.Writes) AS TotalWrites
FROM
(SELECT 
  Data2.Results.value ('(data/.)[6]', 'bigint') AS Reads,
  Data2.Results.value ('(data/.)[7]', 'bigint') AS Writes,
  Data2.Results.value ('(action/.)[1]', 'int') AS ResourcePoolID
FROM
(SELECT CAST(xest.target_data AS XML) StatementData
  FROM sys.dm_xe_session_targets xest
  JOIN sys.dm_xe_sessions xes ON
    xes.address = xest.event_session_address
  WHERE xest.target_name = 'ring_buffer'
    AND xes.name = 'MonitorIO') Statements
CROSS APPLY StatementData.nodes ('//RingBufferTarget/event') AS Data2 (Results)) AS DT
WHERE DT.ResourcePoolID > 255 –- only show user-defined resource pools
GROUP BY DT.ResourcePoolID;
GO

Phew! Hay algunos ciertamente complicado código en allí, pero funciona bien. Ahora tenemos los resultados que desea. Examine el resultado de esta consulta en mis datos de prueba, que se muestra en la figura 7 .

La figura 7 resultados de la consulta
ResourcePoolID TotalReads TotalWrites
256 3831 244
257 5708155 1818

Saber que el fondo de recursos 256 es de marketing, y 257 para el desarrollo, para estos números tomar sentido en términos de cuánta actividad de la base de datos esperar de los equipos de mi compañía. Podría no ha genera estos resultados como fácilmente tenía no utiliza total de eventos.

Y por último, se necesita para detener la sesión mediante el siguiente código:

ALTER EVENT SESSION MonitorIO ON SERVER
STATE = STOP;
GO

Para ver más de lo estoy hablando en términos de la salida en cada etapa de este ejemplo, consulte la pantalla convertir que acompaña a este artículo. Puede encontrarlo en technetmagazine.com/Video.

La sesión de eventos totales system_health

SQL Server 2008 en realidad se suministra con una sesión predefinida que está configurada para ejecutarse de forma predeterminada y se llama a la sesión system_health. En esta sesión era la idea del equipo con el servicio de soporte técnico y realiza un seguimiento de información suele utilizar para depurar sistemas de cliente, tales como cuando se produce un interbloqueo o un error de gravedad de alta. La sesión se crean y iniciada como parte del proceso de instalación de una instancia de SQL Server 2008, y realiza un seguimiento eventos en un búfer para que no se consume demasiada memoria.

Puede utilizar el siguiente código para ver lo que contiene el búfer del anillo:

SELECT CAST (xest.target_data AS XML)
FROM sys.dm_xe_session_targets xest 
JOIN sys.dm_xe_sessions xes ON
xes.address = xest.event_session_address 
WHERE xes.name = 'system_health';
GO

El Blog de soporte técnico de Microsoft PSS SQL ha obtener información más detallada en lo que está registrado por esta sesión.

Ajustar hacia arriba

Ha sido dijo que el equipo de SQL Server está planeando agregar muchos más eventos en sqlserver.exe en el futuro. De hecho, y el número de versión 165 en el febrero de 2007 CTP, Community Technology Preview para 254 en el lanzamiento de RTM (lanzamiento a fabricación).

Hay algunos eventos realmente interesante de aspecto para investigar, como cambio de captura de datos (que trata en mi artículo "Seguimiento de los cambios en la base de datos empresarialen el número de noviembre de 2008 de TechNet Magazine), compresión de datos y índice página divisiones. Índice de página divisiones busca como una forma prometedora averiguar qué índices crean copias fragmentación sapping de rendimiento sin necesidad de ejecutar periódicamente la sys.dm_db_index_physical_stats DMV a través de todos los índices.

En general, el sistema de eventos total nuevo permite algunos bastante sofisticado supervisión que nunca se haya posible antes. Aunque requiere un poco de aprendizaje averiguar el análisis de XML que tendrá que hacer para obtener los datos, las ventajas del nuevo sistema creces el problema de tener que aprender algunas nuevas construcciones de código.

Espero que este artículo ha proporcionado suficiente de un resumen de total de eventos para que interesadas y mostrar los tipos de cosas que puede hacer con él. Solución de problemas feliz! Como siempre, si tiene preguntas o comentarios, no dude colocar me una línea Paul@SQLskills.com.

S. Paul Randal es el director de administración de SQLskills.comy un MVP de SQL Server. Trabajado en el equipo de motor de almacenamiento de SQL Server en Microsoft desde 1999 a 2007. Paul escribió DBCC CHECKDB y reparar para SQL Server 2005 y era responsable del motor de almacenamiento principal durante el desarrollo de SQL Server 2008. Paul es un experto en recuperación ante desastres, una alta disponibilidad y mantenimiento de la base de datos y es un moderador habitual en conferencias de todo el mundo. Blogs en SQLskills.com/blogs/paul.