¿Notificación de consulta de larga duración o punto muerto en SQL Server 2008 R2?

15

Me gustaría saber si hay una manera de enviar una notificación en punto muerto. Si es así, qué consultas serían necesarias. Entiendo que SQL Server se encarga de los puntos muertos, simplemente me gustaría obtener información sobre las consultas involucradas.

Encontré lo siguiente para determinar consultas de larga duración:

SELECT 
    creation_time
    ,last_execution_time
    ,total_physical_reads
    ,total_logical_reads
    ,total_logical_writes
    , execution_count
    , total_worker_time
    , total_elapsed_time
    , total_elapsed_time / execution_count avg_elapsed_time
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
        WHEN -1 THEN DATALENGTH(st.text)
        ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st  
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC; 

Me gustaría saber si lo anterior es la forma correcta de hacerlo, o ¿hay una mejor manera de determinar si alguna consulta lleva más tiempo que un intervalo específico, digamos 5 min como se muestra?

Gracias

Hasanain
fuente

Respuestas:

8

Con SQL 2008 hay una nueva característica que puede usar para puntos muertos y largas colas: eventos extendidos . Los eventos extendidos son objetos de bajo nivel y consumen recursos mucho menores que otros métodos como la creación de perfiles / rastreo, alertas, etc.

Para usar eventos extendidos con deadlocksesta publicación de Jonathan Kehayias , un MVP del servidor SQL.

Para usar eventos extendidos para buscar long running queries, consulte esta publicación detallada de Pinal Dave , otro MVP de SQL Server.

StanleyJohns
fuente
10

Puede configurar alertas para ambos con el Agente SQL. Cree una nueva alerta y seleccione el tipo "Alerta de condición de rendimiento de SQL Server"

Para consultas de larga duración, elija Objeto "MSSQL $ InstanceName: Transacciones" y Contador: Tiempo de ejecución de transacción más largo. Configure los valores y las opciones de notificación de alerta, y listo.

Para puntos muertos, el objeto es "MSSQL $ InstanceName: Locks" y el contador es "Número de puntos muertos / segundo"

Si desea un control más detallado de la notificación de punto muerto, consulte esto: http://www.sqlservercentral.com/articles/Administration/3243/

Cuarenta y nueve
fuente
Intenté configurar la alerta como sugirió, sin embargo, el trabajo solo se ejecutará si tengo definidos los pasos. ¿Hay alguna manera de configurar la alerta sin definir los pasos del trabajo?
Hasanain
4

Yo preferiría la sugerencia de @StanleyJohns si tiene SQL2008. Vale la pena familiarizarse con los eventos extendidos como herramienta de diagnóstico y la serie An XEvent a Day de Jonathon es un excelente lugar para comenzar.

Una alternativa para los puntos muertos es habilitar las marcas de seguimiento 1204 y 1222 , que vuelcan la información de punto muerto en el registro de errores de SQL. Habilite ambos para obtener la información en dos formatos diferentes, lo que puede facilitar la comprensión de las complejas cadenas de punto muerto.

Mark Storey-Smith
fuente