2010-07-20 4 views
16

Я видел подобный вопрос, который задал, как контролировать ход выполнения резервного копирования/восстановления работы: Is there a SQL script that I can use to determine the progress of a SQL Server backup or restore process?Контроль за ходом выполнения запроса SQL в SQL SERVER

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

Заранее благодарен, Roni.

+0

Здравствуйте, Рони, чтобы уточнить, хотите ли вы отслеживать ход выполнения запроса, который выполняет резервное копирование/восстановление? Или запрос вообще? –

ответ

16

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

+0

Действительно. В некоторых (плохо сконфигурированных/перегруженных) системах один интенсивный запрос может блокировать критически важную таблицу - и внезапно - запросы, которые обычно заканчиваются во втором прогоне в течение десятков минут. Вы можете посмотреть время запроса и дать предположение - «в среднем, этот запрос завершается в 5:41, он работает для 3:15 сейчас», но это просто: предположение (даже не оценка). – Piskvor

+1

Я видел 3D-рендеринг экранных закладок, работающих на коробках с базами данных! –

+0

В Oracle, например, мы имеем представление v $ session_longops, которое отображает статус операций. http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2092.htm Я уверен, что в SQL SERVER нет подобной вещи? Roni. –

11

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

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

Этот запрос полезен только в том случае, если у вас есть разрешение ПРОСМОТР СЕРВЕРА. Если вы этого не сделаете, вы увидите результаты только для представленной инструкции SELECT, что немного бесполезно! Чтобы установить, есть ли у вас разрешения, выполните следующие действия: «SELECT * FROM fn_my_permissions (NULL,« SERVER »); - Если вы не видите запись с именем_имя «ПРОСМОТР СЕРВЕРОВ», то у вас нет разрешения. – samaspin

+10

Кроме того, эта информация предоставляется только при выполнении определенных команд. Это, например, 'ROLLBACK',' RECOVERY' или 'BACKUP DATABASE'. – user35443

4

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

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

Что вы хотите, это Live Query Statistics.

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

enter image description here

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

enter image description here

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

enter image description here

Смежные вопросы