web-dev-qa-db-fra.com

Existe-t-il un moyen fiable de déterminer le temps qu'il a fallu à l'optimiseur pour générer un plan de requête?

Je ne sais pas par où commencer, mais existe-t-il un moyen de voir combien de temps il a fallu à l'optimiseur pour générer un plan de requête pour une requête? Est-il stocké dans l'un des DMV ou quelque chose qui fait partie de l'une des statistiques? Ou puis-je le calculer d'une manière ou d'une autre si j'inclus des statistiques en direct ou le plan d'exécution réel? Peut-être dans le magasin de requêtes?

7
J.D.

Il y a plusieurs façons:

  • Si vous pouvez exécuter la requête
    • vous pouvez utiliser set statistics time on qui vous donnera:

      Temps d'analyse et de compilation SQL Server: temps CPU = xx ms, temps écoulé = xx ms.

  • Si vous ne pouvez pas exécuter la requête, alors exploitez le cache du plan pour vérifier temps de compilation de la requête ainsi que de nombreuses autres informations importantes.

Il existe de nombreuses autres façons comme le profileur, la trace côté serveur ou XEvents - mais ils sont chers et peuvent avoir un impact négatif sur la performance de votre serveur SQL.

Vous pouvez utiliser sp_BlitzCache pour connaître le délai d'expiration de la compilation des requêtes à partir du cache du plan.

7
Kin Shah