I never knew you could monitor the progress of long-running processes like DBCC CHECKDB, backups, shrinking files, rebuilding indexes, etc. until I read an offhand comment by Kalen Delaney (which I can't find now). Now I keep this script open in a SSMS window about 90% of my day!
-- Displays the progress of several kinds of commands. See BOL. ; with cte1 as ( select command as command, percent_complete / 100.0 as percent_complete, total_elapsed_time / 1000.0 / 60.0 as elapsed_minutes from sys.dm_exec_requests where percent_complete > 0.0 ) , cte2 as ( select command as command, cast(percent_complete * 100.0 as float(6)) as percent_complete, cast(elapsed_minutes as int) as elapsed_minutes, cast((elapsed_minutes / percent_complete) - elapsed_minutes as int) as remaining_minutes from cte1 ) select command as 'Command', percent_complete as '% Complete', elapsed_minutes as 'Elap Min', remaining_minutes as 'Left Mins', cast(dateadd(minute, remaining_minutes, getdate()) as nvarchar) as 'ETA' from cte2 order by percent_complete desc
The output looks like this:
Command % Complete Elap Min Left Mins ETA DbccFilesCompact 31.62873 15 33 Feb 6 2011 11:50PM