La DMV sys.dm_exec_requests possède plusieurs colonnes intéressantes pour nous répondre :

  • percent_complete
  • total_elapsed_time
  • estimated_completion_time

Ces informations vont pouvoir nous indiquer (de manière très approximative) où nous en sommes et combien de temps il reste pour exécuter certains types de commandes de longue durée :

  •     ALTER INDEX REORGANIZE
  •     Option AUTO_SHRINK avec ALTER DATABASE
  •     BACKUP DATABASE
  •     DBCC CHECKDB
  •     DBCC CHECKFILEGROUP
  •     DBCC CHECKTABLE
  •     DBCC INDEXDEFRAG
  •     DBCC SHRINKDATABASE
  •     DBCC SHRINKFILE
  •     RECOVERY
  •     RESTORE DATABASE,
  •     ROLLBACK
  •     TDE ENCRYPTION

La requête suivante va nous permettre d'obtenir les informations sur les tâches longues en cours :

SELECT
session_id, status
, command
, DB_NAME(database_id) AS DBName
, start_time AS [Start Time]
, estimated_completion_time / 3600000 AS [Estimated Completion Time (Hours)]
, total_elapsed_time / 60000 AS [Elapsed Time (Minutes)]
, CAST(percent_complete AS DECIMAL(5,2)) AS [Percent Complete]
FROM sys.dm_exec_requests
WHERE command = 'DbccFilesCompact' OR command = 'BACKUP DATABASE' OR command = 'RESTORE DATABASE' OR command = 'DbccSpaceReclaim'
OR percent_complete > 0

Malheureusement, cette information est très approximative et il peut souvent arriver qu'une tâche (un DBCC SHRINKFILE par exemple) reste figée des heures sur un pourcentage...