/* 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;