Question

Je tente d'améliorer les performances d'une procédure stockée. Quand je lance le SP, il finit presque instantanément, comme si quelque chose mis en mémoire cache. On m'a dit d'utiliser les deux lignes de SQL avant d'exécuter la SP dans SSMS suivants:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Quand je lance le SP avec les deux lignes de code au-dessus des finitions SP dans environ 8 secondes. Cependant, est ce qui me donne vraiment le temps d'exécution réel (comme si je lance ce depuis une application)? Comment puis-je savoir?

Était-ce utile?

La solution

Ces commandes faire deux choses:

  • Vider le cache de la page, les pages stocke les données qui ont déjà été récupérés à partir du disque (normalement le plus grand facteur dans le temps dans une requête est l'accès au disque)
  • Effacer le cache de plan de requête, ce qui signifie que les besoins de serveur pour créer un nouveau plan de requête. Ceci est normalement pas significatif à l'exception des volumes de transaction très élevés.

Vous obtenez essentiellement un temps qui est équivalent au scénario « du pire » - vous venez redémarré le serveur et rien est en mémoire. les exécutions suivantes ne doivent pas payer le coût pour extraire les données à partir du disque étant donné que ces pages sont déjà chargées dans la mémoire.

Ceci est similaire à une situation réelle du monde -. Votre premier utilisateur d'exécuter une requête particulière devra probablement attendre plus longtemps que sur les exécutions suivantes, en supposant que vous vérifiez les mêmes données

Une bonne méthode que je tiens à utiliser est en cours d'exécution à plusieurs reprises et en prenant une moyenne. Ceci est particulièrement utile dans un environnement partagé puisque vous ne disposez d'un contrôle total sur des ressources partagées comme tempdb.

Vous pouvez également utiliser ces commandes pour obtenir plus d'informations sur ce qui se passe réellement dans les coulisses:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Ceux-ci vous donnera des informations sur la page détaillée lit à partir du disque (par objet), page logique lit, le temps passé la compilation d'un plan et le temps passé à l'exécution d'une requête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top