web-dev-qa-db-fra.com

Surveillance de la progression d'une requête SQL dans SQL SERVER

J'ai vu une question similaire qui demandait comment surveiller la progression d'une opération de sauvegarde/restauration: Existe-t-il un script SQL que je peux utiliser pour déterminer la progression d'une sauvegarde ou d'une restauration SQL Server?

Je voudrais savoir s'il existe une requête/méthode similaire pour voir combien de temps il reste avant la fin de la requête. Par exemple, une requête est généralement a un temps écoulé de 5 minutes. Je voudrais savoir combien de temps il reste jusqu'à ce qu'il se termine PENDANT l'exécution de la requête.

19
Roni Vered

Il n'y a aucun moyen de savoir combien de temps il reste. L'exécution d'une requête dépend de beaucoup de choses au-delà de la requête elle-même: verrouillage/blocage d'autres requêtes, autres processus consommant des ressources (utilisation du processeur/disque), du système d'exploitation, du réseau, etc. Que se passe-t-il si votre requête de 5 minutes est en cours d'exécution, mais quelqu'un d'autre lance un rapport volumineux, votre requête peut s'exécuter à 17 h 30 maintenant. Et si quelqu'un commence à télécharger un fichier volumineux et monopolise toute la bande passante du réseau? Que faire si le système d'exploitation décide de faire quelque chose en arrière-plan, etc. Jusqu'à ce que toutes les lignes soient renvoyées, la requête n'est pas terminée, mais elle peut s'exécuter dans un délai variable.

17
KM.

Ce que vous voulez, c'est Live Query Statistics .

Vous pouvez l'activer dans la version la plus récente de SSMS avec un bouton à côté de celui qui vous donne le plan de requête normal:

enter image description here

Cela vous donne alors un plan de requête en direct:

enter image description here

En bas, vous voyez la progression totale:

enter image description here

20
John

sys.dm_exec_requests a cette information, donc quelque chose comme ça vous donnera le progrès:

SELECT 
percent_complete
FROM sys.dm_exec_requests
--where session_id=51 or command like 'restore%'
14
Andrey.ca

Oui, vous pouvez connaître le temps écoulé estimé, sauf en cas de situation inattendue affectant l'exécution du processus.

Select total_elapsed_time,
 * from sys.dm_exec_sessions where session_id="your Id here" 
6
JameSQL