SQL Server中没有内置或现成的方法去估算query完成的百分比或估算运行时间/剩下的运行时间。这篇文章仅对有兴趣研究的同学提供一些参考。
1, 首先我们可以先看看两篇关于如何估算query完成百分比的论文:
http://research.microsoft.com/pubs/76556/progress.pdf
http://pages.cs.wisc.edu/~naughton/includes/papers/increasingaccuracy.pdf
2,另外值得注意的是sys.dm_exec_requests中有percent_complete,但是大部分session该值都为零。因为这个字段只对特殊的command有效。
Percentage of work completed for the following commands:
-
ALTER INDEX REORGANIZE
-
AUTO_SHRINK option with ALTER DATABASE
-
BACKUP DATABASE
-
DBCC CHECKDB
-
DBCC CHECKFILEGROUP
-
DBCC CHECKTABLE
-
DBCC INDEXDEFRAG
-
DBCC SHRINKDATABASE
-
DBCC SHRINKFILE
-
RECOVERY
-
RESTORE DATABASE,
-
ROLLBACK
-
TDE ENCRYPTION
http://msdn.microsoft.com/en-us/library/ms176083.aspx
例如sys.dm_os_tasks可以查询一个session的“Total byte count of I/Os that are performed by this task.” 我们是否可以结合query的执行计划中预估的磁盘IO来估算query的完成情况?有待研究。