Encontre todas as consultas executadas recentemente em um banco de dados


21

[Sou iniciante no programa T-SQL]
[..e espero estar no site de troca de pilhas certo]

Gostaria de obter uma lista de todas as consultas que executei (no mínimo, as que executei hoje desde a manhã). Preciso fazer um relatório sobre os tempos de execução das consultas.

A pesquisa on-line não me deu muitas informações úteis. A única consulta que encontrei on-line que parecia bem próxima é

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

Essa consulta retornou alguns resultados estranhos (a maioria dos quais eram vários sprocs). Além disso, todos esses resultados mostram consultas executadas desde a tarde de hoje (preciso de consultas da manhã).

Não encontrei nada nas perguntas anteriores (se uma pergunta semelhante já tiver sido feita, aponte-me para ela).

Vi algumas sugestões sobre o SQL Profiler, mas acho que o profiler só me ajudaria se eu já tivesse iniciado o rastreamento (corrija-me se estiver errado).

Alguém pode me sugerir como eu deveria obter uma lista de todas as consultas que foram executadas no banco de dados desde a manhã (incluindo os tempos de execução da consulta).

[Seria útil (não é um requisito) se eu também conseguisse, de alguma forma, obter o nome de usuário do usuário que executou a consulta]

Respostas:


12

Essa consulta retornou alguns resultados estranhos (a maioria dos quais eram vários sprocs). Além disso, todos esses resultados mostram consultas executadas desde a tarde de hoje (preciso de consultas da manhã).

Isso ocorre porque você está procurando no cache do procedimento e os planos usados ​​para a manhã podem não estar mais lá (devido à pressão da memória, reinicialização do servidor / instância, limpando manualmente o cache do proc etc.).

A maneira real de obter as consultas executadas em uma instância (ou mais especificamente em um banco de dados) seria criar uma sessão de Rastreamento SQL ou Eventos Estendidos. Criadas adequadamente, qualquer uma dessas opções fornecerá as informações que você está procurando.

Se você estiver procurando estatísticas de execução desta manhã e somente desta manhã (por exemplo, configurar as implementações de monitoramento mencionadas como uma tarefa proativa e a ser executada na próxima vez não for suficiente), a menos que isso já tenha sido criado, não haverá maneira nativa de obter essas informações.

Para referência futura, inicie com um rastreamento de SQL que captura o evento SQL: StmtCompleted . No XE seria o sql_statement_completedevento.

Na minha opinião, em vez de continuar sua pesquisa por remanescentes de estatísticas de execução de consultas, eu começaria a dedicar algum tempo a descobrir como reexecutar a carga de trabalho que você está tentando medir. Mas desta vez antes disso, configure o rastreamento / monitoramento adequado.


Posso filtrar por SQL: colunas de dados StmtCompleted?
Kiquenet
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.