Мониторинг выполнения 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 с помощью кнопки рядом с той, которая дает вам обычный план запроса:
Это дает вам живой план запроса:
внизу вы видите общий прогресс:
Да, вы можете знать предполагаемое время, если не будет какой-то неожиданной ситуации, влияющей на выполнение процесса.
Select total_elapsed_time,
* from sys.dm_exec_sessions where session_id="your Id here"