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.