[Sou um programador T-SQL de nível iniciante]
[..e espero estar no site de troca de pilha certo]
Gostaria de obter uma lista de todas as consultas que executei (no mínimo, aquelas 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 rendeu muitas informações úteis. A única consulta que encontrei online 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
Esta consulta retornou alguns resultados estranhos (a maioria dos quais eram um monte de sprocs). Além disso, todos esses resultados mostram consultas executadas desde a tarde de hoje (preciso de consultas da manhã).
Não consegui encontrar nada nas perguntas anteriores (se uma pergunta semelhante já foi feita, por favor, indique-me).
Eu vi algumas sugestões sobre o SQL Profiler, mas acho que o profiler me ajudaria apenas se eu já tivesse iniciado o rastreamento (corrija-me se estiver errado).
Alguém pode me sugerir como devo proceder para obter uma lista de todas as consultas que foram executadas no banco de dados desde a manhã (incluindo os tempos de execução das consultas).
[Seria útil (não um requisito) se eu também pudesse de alguma forma obter o nome de usuário do usuário que executou a consulta]
Isso ocorre porque você está procurando no cache de procedimento e os planos que foram usados para a manhã podem não estar mais lá (devido à pressão da memória, reinicialização do servidor/instância, limpeza manual do cache do proc etc.).
A maneira real de executar as consultas em uma instância (ou, mais especificamente, em um banco de dados) seria criar uma sessão SQL Trace ou Extended Events. Devidamente criado, qualquer um deles fornecerá a informação que você está procurando.
Se você estiver procurando por estatísticas de execução desta manhã e somente esta manhã (ou seja, configurar as implementações de monitoramento mencionadas como uma tarefa proativa e a fazer na próxima vez não é suficiente), então, a menos que isso já tenha sido criado, não haverá maneira nativa de obter essas informações.
Para referência futura, comece com um SQL Trace que capture o evento SQL:StmtCompleted . Em XE seria o
sql_statement_completed
evento.Na minha opinião, em vez de continuar sua busca por restos de estatísticas de execução de consulta, eu começaria a gastar tempo para descobrir como reexecutar a carga de trabalho que você está tentando medir. Mas desta vez antes disso, configure o rastreamento/monitoramento adequado.