Notificação sobre consultas de longa execução ou conflito no SQL Server 2008 R2?


15

Gostaria de saber se existe uma maneira de enviar uma notificação em deadlock? Se sim, quais consultas seriam necessárias. Entendo que o SQL Server cuida de conflitos, simplesmente gostaria de obter informações sobre as consultas envolvidas.

Encontrei o seguinte para determinar consultas de longa duração:

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; 

Gostaria de saber se o procedimento acima é o caminho certo ou existe uma maneira melhor de determinar se alguma consulta demora mais que um intervalo específico, digamos 5 minutos, como mostrado?

obrigado

Respostas:


8

Com o SQL 2008, há um novo recurso que você pode usar para conflitos e filas de execução longa: eventos estendidos . Eventos estendidos são objetos de baixo nível e consomem muito menos recursos do que outros métodos como criação de perfil / rastreamento, alertas, etc ...

Para usar eventos estendidos, deadlocksconsulte esta postagem de Jonathan Kehayias , um MVP do SQL Server.

Para usar eventos estendidos para encontrar long running queries, confira esta postagem detalhada de Pinal Dave , outro MVP do SQL Server.


10

Você pode configurar alertas para ambos com o SQL Agent. Crie um novo alerta e selecione o tipo "Alerta de condição de desempenho do SQL Server"

Para consultas demoradas, escolha o Objeto "MSSQL $ InstanceName: Transactions" e o Contador: Maior Tempo de Execução da Transação. Configure os valores e as opções de notificação de alerta e pronto.

Para conflitos, o objeto é "MSSQL $ InstanceName: bloqueios" e o contador é "Número de conflitos / s"

Se você deseja um controle mais refinado da notificação de conflito, verifique isto: http://www.sqlservercentral.com/articles/Administration/3243/


Tentei configurar o alerta como você sugeriu, no entanto, o trabalho só será executado se houver etapas definidas. Existe uma maneira de configurar o alerta sem definir as etapas do trabalho?
Hasanain 29/08

4

Eu seria a favor da sugestão de StanleyJohns se você tiver o SQL2008. Vale a pena se familiarizar com os eventos estendidos como ferramenta de diagnóstico e a série An XEvent a Day da Jonathon é um ótimo lugar para começar.

Uma alternativa para conflitos é ativar os sinalizadores de rastreamento 1204 e 1222 , que despejam informações de conflito no log de erros do SQL. Ative os dois, para obter as informações em dois formatos diferentes, o que facilita a compreensão de cadeias complexas de conflito.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.