SYSK 182: SQL -- Are We There Yet?
Want to know how long it’s estimated to take for your SQL long running SQL command to finish execution? SQL 2005’s dynamic management view (DMV) sys.dm_exec_requests can help you estimate completion of long-running tasks. The example below gives you the syntax to get an estimate for when your database backup or restore will be finished.
SELECT r.session_id AS [Session ID], r.command AS [Command Type],
CONVERT(NUMERIC(6,2),r.percent_complete) AS [Percent Complete],
CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(6,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(6,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(6,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
-- also include actual command, helpful if several parallel backup/restore commands are running
CONVERT(VARCHAR(256),
(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle))) AS Command
FROM sys.dm_exec_requests r
WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')
Special thanks to Alexey Yeltsov for providing this solution.