/*
Track index creating progress
1 data set: index creation info.
No
Solomon Rutzky
2020-09-03
2021-08-12 by Konstantin Taranov
1.0
https://github.com/ktaranov/sqlserver-kit/blob/master/Scripts/Index_Creating_Info.sql
https://dba.stackexchange.com/a/139225/107045
*/
WITH agg AS
(
SELECT SUM(qp.row_count) AS RowsProcessed,
SUM(qp.estimate_row_count) AS TotalRows,
MAX(qp.last_active_time) - MIN(qp.first_active_time) AS ElapsedMS,
MAX(IIF(qp.close_time = 0 AND qp.first_row_time > 0,
physical_operator_name,
N'')) AS CurrentStep
FROM sys.dm_exec_query_profiles qp
WHERE qp.[physical_operator_name] IN (N'Table Scan', N'Clustered Index Scan',
N'Index Scan', N'Sort')
AND qp.[session_id] IN (SELECT session_id from sys.dm_exec_requests where command IN ( 'CREATE INDEX','ALTER INDEX','ALTER TABLE') )
), comp AS
(
SELECT *,
(TotalRows - RowsProcessed) AS RowsLeft,
(ElapsedMS / 1000.0) AS ElapsedSeconds
FROM agg
)
SELECT CurrentStep,
TotalRows,
RowsProcessed,
RowsLeft,
CONVERT(DECIMAL(5, 2),
((RowsProcessed * 1.0) / TotalRows) * 100) AS PercentComplete,
ElapsedSeconds,
((ElapsedSeconds / RowsProcessed) * RowsLeft) AS EstimatedSecondsLeft,
DATEADD(SECOND,
((ElapsedSeconds / RowsProcessed) * RowsLeft),
GETDATE()) AS EstimatedCompletionTime
FROM comp;