相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战。例如,你创建索引的时候,很多会话被阻塞,你只能取消创建索引的任务。查看这些索引维护操作的进度、预估时间对于我们有较大的意义,需要根据这个做一些决策。下面我们来看看看看如何获取CREATE INDEXALTER INDEX REBUILDALTER INDEX ORGANIZE的进度。

 

 

索引重组

 

SQL Server 2008开始,有个DMV视图sys.dm_exec_requests,里面有个字段percent_complete表示以下命令完成的工作的百分比,这里面就包括索引重组(ALTER INDEX REORGANIZE),这其中不包括ALTER INDEX REBUILD,可以查看索引重组(ALTER INDEX ORGANIZE)完成的百分比。也就是说在SQL Server 2008之前是无法获取索引重组的进度情况的。

 

percent_complete

real

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

Is not nullable.

 

 

测试环境:SQL Server 2008 2017 RTM CU13

 

SELECT  er.session_id ,
        er.blocking_session_id ,
        er.status ,
        er.command ,
        DB_NAME(er.database_id) DB_name ,
        er.wait_type ,
        et.text SQLText ,
        er.percent_complete
FROM    sys.dm_exec_requests er
        CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) et
WHERE   er.session_id = 57
        AND er.session_id <> @@SPID;

相关文章: