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.


 


 

Comments (0)

Skip to main content