检查更改索引重组/重建的进度

noj*_*lag 22 sql-server dmv sql-server-2012

提交更改索引重组/重建时如何检查进度/状态?

Rea*_*ces 22

很难说你的重建需要多长时间,因为 SQL 本身并不真正提前知道,也不能给你一个估计。

您可以使用以下查询来使用 dm_exec_requests dmv 来查看您的索引重建进行了多长时间,并验证 SQL 并没有真正进行估计:

SELECT r.session_id,r.command,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(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(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)))
FROM sys.dm_exec_requests r WHERE command IN ('Alter Index')
Run Code Online (Sandbox Code Playgroud)

但是,当涉及到对所需时间的实际估计时,您可以阅读sqlmunkee 的这篇不错的博客文章,其中总结道:“.. 视情况而定。”:

而且由于我们并非都使用相同的硬件、使用相同的软件或查看相同的数据,因此答案必须是……这取决于

令人沮丧,但真实,可悲。

  • 感谢您提供漂亮的脚本,我不得不将 where 子句调整为“DBCC”,但后来我得到了一些信息,说完成百分比为 6.42,ETA 最小值约为 707(针对一个分区)。我会密切关注这会持续多远。也会检查帖子。 (2认同)