Как узнать процент выполнения запроса

Начиная с SQL Server 2005 для команд BACKUP, RESTORE и некоторых команд DBCC (например, DBCC CHECKDB) появилась возможность узнать процент выполнения запроса в процессе выполнения команды. При запуске команд BACKUP и RESTORE можно указать параметр STATS, но этим можно пользоваться только в интерактивном режиме. А у команд DBCC аналогичного параметра вообще нет. Но очень часто бывает полезным узнать процент выполнения данных команд и приблизительное время окончания. На помощь нам приходит системное представление sys.dm_exec_requests. Для примера я запущу резервное копирование, восстановление и проверку целостности на тестовом сервере (каждую из этих команд я запускаю в отдельном окне):

DBCC CHECKDB('TEST');
BACKUP DATABASE [TEST2] TO DISK = 'C:\TEMP\TEST2.bak';
RESTORE DATABASE [TEST3] FROM DISK = 'C:\TEMP\TEST3.bak';

И давайте следующим запросом посмотрим процесс выполнения этих команд:

SELECT
	[command]
	,[start_time]
	,[percent_complete]
	,[estimated_completion_time] / 60000. AS [estimated_completion_time_min]
FROM sys.dm_exec_requests
WHERE [command] = 'BACKUP DATABASE'
	OR [command] = 'RESTORE DATABASE'
	OR [command] LIKE '%DBCC%'

Результаты получаются примерно такие:

Результаты запроса

Результаты запроса