Connaître le temps estimé pour une opération longue (DBCC, Backup, Restore, etc...)
Par Arian Papillon le mardi 11 août 2015, 15:59 - Lien permanent
Qui n'a pas attendu devant son écran après avoir lancé une commande (DBCC, Backup, Restore ou rollback volumineux), sans avoir idée du temps que cela va prendre ?
En fait, une information existe bien dans la DMV sys.dm_exec_requests. Voyons comment l'utiliser...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...