Como encontro uma consulta de longa duração com ID do processo, nome do processo, hora do login, usuário, hora de início e duração?

23

Alguém pode me ajudar a encontrar um abaixo dados detalhes para consulta de longa duração. ProcessID, nome do processo, banco de dados, host, usuário, hora de login do processo, hora de início da consulta e duração da consulta.

Estou procurando uma consulta ou um SP que me forneça esses dados.

user3598321
fonte

Respostas:

38

Como comentado, a melhor ferramenta é sp_whoIsActive de Adam Machanic . Ele pode ser usado de várias maneiras, para ver o que está sendo executado no momento em que você inicia o script ou em loops para monitorar alguma ação específica, como consultas lentas, por exemplo.

Para executar um loop, dê uma olhada aqui: Como registrar atividades usando sp_whoisactive em um loop Para detectar consultas lentas: Como usar sp_WhoIsActive para localizar consultas lentas do SQL Server

Você pode usar DMVs diretamente para obter suas consultas mais lentas e agir a partir daí. Verifica as consultas de diagnóstico de Glenn Berry .

E, finalmente, você pode usar esta consulta para encontrar consultas que consomem mais tempo. Você pode brincar com o dm_exec_query_stats para adicionar mais dados ou se juntar a outros para obter mais informações. Esteja ciente de que os dmvs são lavados e atualizados toda vez que o servidor é reiniciado.

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
ORDER BY total_elapsed_time / execution_count DESC;

EDITAR

Uma nova opção já está disponível há algum tempo, First Reponder Kit . É um conjunto de scripts, fornecidos gratuitamente sob a licença MIT pela equipe BrentOzar, que ajudarão em várias tarefas, incluindo a solicitada pelo OP. Principalmente sp_BlitzFirst e sp_BlitzWho roteiros para este caso.

Yaroslav
fonte
10

Eu recomendo sp_whoisactive . É um SP de terceiros, mas pode lhe dizer tudo o que você listou acima e muito mais que isso. É uma ferramenta incrível para ter em seu arsenal.

Bob Pusateri
fonte