2010-07-20 5 views
16

j'ai vu une question similaire qui a demandé comment surveiller la progression d'une sauvegarde/restauration: Is there a SQL script that I can use to determine the progress of a SQL Server backup or restore process?Suivi de la progression d'une requête SQL dans SQL Server

Je voudrais savoir s'il y a une requête similaire/façon de voir combien de temps la requête a quitté jusqu'à ce qu'elle se termine. Par exemple, une requête a généralement duré 5 minutes. Je voudrais savoir combien de temps il reste jusqu'à ce qu'il se termine PENDANT l'exécution de la requête.

Merci d'avance, Roni.

+0

Salut Roni, pour clarifier, cherchez-vous à surveiller la progression d'une requête qui effectue une sauvegarde/restauration? Ou une requête en général? –

Répondre

16

Il n'y a aucun moyen de savoir combien de temps il reste. Le temps d'exécution d'une requête dépend de plusieurs choses au-delà de la requête proprement dite: blocage/blocage d'autres requêtes, autres processus consommant des ressources (CPU/disque), le système d'exploitation, le réseau, etc. quelqu'un d'autre donne le coup d'envoi d'un rapport volumineux, votre requête peut maintenant être lancée à 5h30. Que faire si quelqu'un commence à télécharger un gros fichier et monopolise toute la bande passante du réseau? Que faire si l'OS 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 laps de temps variable.

+0

En effet. Sur certains systèmes (mal configurés/surchargés), une seule requête intensive peut verrouiller une table cruciale - et tout d'un coup, les requêtes qui se terminent généralement sous une seconde exécution pendant des dizaines de minutes. Vous pouvez regarder les temps de requête et fournir une estimation - "en moyenne, cette requête se termine en 5:41, elle est en cours pour 3:15 maintenant", mais c'est juste que: une estimation (même pas une estimation). – Piskvor

+1

J'ai vu des économiseurs d'écran de rendu 3D s'exécuter sur des boîtes de base de données de production! –

+0

Dans Oracle par exemple, nous avons la vue v $ session_longops, qui affiche l'état des opérations. http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2092.htm Etes-vous sûr qu'il n'y a pas de chose similaire dans SQL SERVER? Roni. –

11

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

SELECT 
percent_complete 
FROM sys.dm_exec_requests 
--where session_id=51 or command like 'restore%' 
+3

Cette requête n'est utile que si vous avez l'autorisation VIEW SERVER STATE. Si vous ne le faites pas, vous ne verrez que les résultats de l'instruction SELECT que vous venez de soumettre, ce qui est un peu inutile! Pour établir si vous avez des autorisations exécutez le suivant "SELECT * FROM fn_my_permissions (NULL, 'SERVER');" - Si vous ne voyez pas d'entrée avec l'autorisation 'VIEW SERVER STATE', vous n'avez pas la permission. – samaspin

+10

En outre, ces informations sont fournies uniquement lorsque des commandes spécifiques sont en cours d'exécution. Ce sont par exemple 'ROLLBACK',' RECOVERY' ou 'BACKUP DATABASE'. – user35443

4

Oui, vous pouvez connaître le temps écoulé estimé à moins qu'il y aurait une situation imprévue touchant l'exécution du processus.

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

Ce que vous voulez sont 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 un plan de requête en direct:

enter image description here

En bas, vous voyez la progression totale:

enter image description here