2010-10-22 19 views
2

Dans le studio de gestion SQL Server 2005, je teste une requête qui utilise des variables de table, dont une a une contrainte unique en cluster. Je remarque que le temps d'exécution total diminue d'un bon montant lorsque j'inclus le plan d'exécution réel pour l'analyser.SQL Server Query est plus rapide dans SSMS lors de l'inclusion du plan d'exécution

Quelle est la raison pour cela, et devrais-je tester uniquement le temps d'exécution total lorsque l'option pour inclure le plan d'exécution est désactivée.

Merci!

Répondre

3

Cela me semble un peu étrange. Etes-vous sûr que la différence que vous voyez n'est pas due à la mise en cache? Je testerais toujours les performances d'un sproc en n'incluant PAS le plan d'exécution, et j'effacerais le cache avant chaque exécution afin d'avoir une comparaison équitable (sur un serveur test/dev db, pas de production).

DBCC FREEPROCCACHE -- will clear the execution plan cache 
DBCC DROPCLEANBUFFERS -- will clear the data cache 
+0

Quand je lance DBCC DROPFREEBUFFERS je reçois une erreur - instruction DBCC incorrect. Lorsque je google, la commande DBCC DROPCLEANBUFFERS apparaît. –

+0

Eh bien, je l'ai testé avec les commandes DBCC FREEPROCCACHE et DBCC DROPCLEANBUFFERS avant l'instruction, et il est encore plus rapide avec le plan d'exécution de l'affichage. Je me demande si cela a quelque chose à voir avec les statistiques, et si oui, comment puis-je obtenir l'ensemble de résultats plus rapide lorsque j'exécute la requête en production. –

+0

Je vais marquer votre réponse comme correcte. Bien que je ne comprenne toujours pas pourquoi cela arrive, c'est probablement un bug dans la façon dont les statistiques client sont comptées, peut-être qu'elles n'incluent pas le temps de création du plan d'exécution quand le plan d'exécution est activé ou quelque chose comme ça . Votre conseil sur l'effacement du cache m'aide à obtenir une bonne base de référence sur le temps d'exécution total entre les trys, merci pour cela. –

0

Je viens de rencontrer dans ce même problème, et après avoir essayé de comprendre comment ou pourquoi, y compris le plan d'exécution accélérait les choses, je suis venu à la conclusion que SSMS misreports simplement le temps d'exécution total. La réponse à votre question est donc qu'elle ne fonctionne pas vraiment plus vite, malheureusement, et que oui, vous devez effectuer des minutages sans que le plan d'exécution soit inclus. Lors de la première exécution de tests dont les temps étaient de quelques centaines de millisecondes, il était difficile de diagnostiquer, mais une fois que j'ai pu reproduire le problème avec une requête plus lente, il est devenu plus facile de voir. Dans la capture d'écran ci-dessous sont cinq exécutions d'une procédure stockée qui renvoie plusieurs ensembles de résultats. Les trois premiers passages étaient sans retourner le plan d'exécution, et les quatrième et cinquième étaient avec. Malgré l'apparition de réponses beaucoup plus rapides (~ 200ms au lieu de ~ 5s), la requête prenait encore ~ ​​5s à compléter. Je suppose qu'il y a un bug dans les statistiques du client quelque part qui chronomètre le plan d'exécution renvoyé et pas la requête complète dans certaines circonstances.

timings