Мониторинг выполнения SQL-запроса в SQL SERVER

Я видел аналогичный вопрос, который спросил, как следить за ходом операции резервного копирования / восстановления: есть ли сценарий SQL, который я могу использовать для определения хода процесса резервного копирования или восстановления SQL Server?

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

спасибо заранее, Ронис.

4 ответов


нет никакого способа узнать, сколько времени осталось. Время выполнения запроса зависит от многих вещей, помимо самого запроса: блокировка / блокировка других запросов, другие процессы, потребляющие ресурсы (использование процессора/диска), операционная система, сеть и т. д. Что делать, если ваш 5-минутный запрос запущен, но кто-то другой запускает большой отчет, ваш запрос может запустить 5:30. Что делать, если кто-то начинает загружать большой файл и свиньи всю пропускную способность сети? Что делать, если ОС решит это сделать что-то на заднем плане и так далее. Пока не будут возвращены все строки, запрос не будет выполнен, но он может выполняться в переменном временном интервале.


sys.dm_exec_requests имеет эту информацию, поэтому что-то вроде этого даст вам прогресс:

SELECT 
percent_complete
FROM sys.dm_exec_requests
--where session_id=51 or command like 'restore%'

Что вы хотите Живая Статистика Запросов.

вы можете активировать его в самой последней версии SSMS с помощью кнопки рядом с той, которая дает вам обычный план запроса:

enter image description here

Это дает вам живой план запроса:

enter image description here

внизу вы видите общий прогресс:

enter image description here


Да, вы можете знать предполагаемое время, если не будет какой-то неожиданной ситуации, влияющей на выполнение процесса.

Select total_elapsed_time,
 * from sys.dm_exec_sessions where session_id="your Id here"