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