Найти все запросы, выполненные за последнее время в базе данных

21

[Я начинающий программист T-SQL]
[..и надеюсь, я на правильном сайте обмена стека]

Я хотел бы получить список всех запросов, которые я выполнил (по крайней мере, те, которые я выполнил сегодня с утра). Мне нужно сделать отчет о времени выполнения запросов.

Поиск в Интернете не принес мне много полезной информации. Единственный запрос, который я нашел в Интернете и показался мне довольно близким, это

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

Этот запрос вернул несколько странных результатов (большинство из которых были связками). Более того, все эти результаты показывают запросы, выполненные с сегодняшнего дня (мне нужны запросы с утра).

Я не смог ничего найти в предыдущих вопросах (если аналогичный вопрос уже задавался, укажите мне на него).

Я видел некоторые предложения, касающиеся SQL Profiler, но я думаю, что profiler поможет мне, только если я уже запустил трассировку (поправьте меня, если я ошибаюсь).

Может кто-нибудь предложить мне, как мне получить список всех запросов, которые были выполнены в базе данных с утра (включая время выполнения запроса) ..

[Было бы полезно (не обязательно), если бы я мог каким-то образом получить имя пользователя, выполнившего запрос]

Прашант Тиллети
источник

Ответы:

12

Этот запрос вернул несколько странных результатов (большинство из которых были связками). Более того, все эти результаты показывают запросы, выполненные с сегодняшнего дня (мне нужны запросы с утра).

Это связано с тем, что вы просматриваете кэш процедур, и планы, которые использовались на утро, могут там больше не храниться (из-за нехватки памяти, перезапуска сервера / экземпляра, ручной очистки кэша процедур и т. Д.).

Реальный способ выполнения запросов к экземпляру (или, точнее, к базе данных) состоит в создании сеанса SQL Trace или расширенного события. Правильно созданный, любой из них даст вам информацию, которую вы ищете.

Если вы ищете статистику выполнения этого утра и только этого утра (т.е. недостаточно установить вышеупомянутые реализации мониторинга как проактивную задачу и задачу «сделать в следующий раз»), то, если она уже не была создана, не будет способ изначально получить эту информацию.

Для дальнейшего использования начните с трассировки SQL, которая фиксирует событие SQL: StmtCompleted . В XE это будет sql_statement_completedсобытие.

По моему мнению, вместо того, чтобы продолжать поиск остатков статистики выполнения запросов, я бы начал тратить время на выяснение того, как повторно выполнить рабочую нагрузку, которую вы пытаетесь измерить. Но на этот раз до этого настройте правильную трассировку / мониторинг.

Томас Стрингер
источник
Можно ли фильтровать по SQL: столбцы данных StmtCompleted?
Kiquenet