Plans d'exécution estimés et réels de Microsoft SQL Server

Supposons que vous construisez une nouvelle maison et que vous avez un contrat avec un constructeur. Après un examen approfondi de la superficie, de la hauteur et des matériaux nécessaires, il estime qu’il faudra 120 jours pour construire une nouvelle maison. Après avoir construit la maison, il a fallu 200 jours pour la construire.

Il y a une différence entre son estimation et le résultat réel. Ceci s'applique également aux plans d'exécution de requêtes sur le serveur SQL, en particulier aux plans d'exécution estimés et réels.

Ce tutoriel contient un Plan d'exécution estimé ainsi qu'un Plan d'exécution réel dans SQL Server.

Plans d'exécution estimés et réels: qu'est-ce qu'un plan d'exécution?

Le plan d'exécution est une tentative de l'optimiseur de requêtes de trouver le moyen le moins coûteux et le plus efficace d'exécuter une requête T-SQL. Pour produire un plan d'exécution, SQL Server utilise différents algorithmes, statistiques, permutations et combinaisons de jointures et d'index afin de générer un plan d'exécution efficace pour une requête.

L'optimiseur de requêtes essaie toujours de générer un plan d'exécution qui aidera à exécuter la requête plus rapidement avec une utilisation moindre du processeur et des E / S.

Cela peut indiquer qu'une table effectue une analyse de table en raison d'un index manquant. Pour commencer par des problèmes de performances, nous devons généralement examiner le plan d'exécution pour avoir une idée générale du retard de la requête.

Plan d'exécution estimé

1. Un plan d'exécution estimé est généré sans exécuter réellement la requête. Il est basé sur les statistiques disponibles sur les index.

2. Les plans d'exécution estimés sont générés par l'optimiseur de requêtes. Par conséquent, il est considéré comme un plan logique.

3. Le plan d'exécution estimé est toujours identique au plan d'exécution réel, mais il peut différer en raison de statistiques non mises à jour, de modifications de la structure de table sous-jacente, d'opérations d'insertion / suppression / mise à jour volumineuses, d'index manquants et d'autres facteurs.

4. La génération d'un plan d'exécution estimé peut échouer si une procédure implique la création de tables temporaires ou de variables de table. Etant donné qu'une requête de plan estimé n'est pas exécutée, les tables temporaires ne sont pas prises en compte lors de la production d'un plan d'exécution estimé.

Plan d'exécution réel

1. Un plan d'exécution réel est généré après l'exécution de la requête. Il est plus informatif et fiable car il est basé sur l'exécution réelle et non sur des statistiques estimées.

2. La génération d'un plan d'exécution réel peut prendre plus de temps si votre requête est complexe car elle doit être exécutée pour générer un plan. Si vous avez une requête complexe, il est préférable de vérifier d'abord le plan estimé.

3. Travailler avec un plan d'exécution réel est fiable lors du dépannage de problèmes liés aux performances, car il nous fournit les informations correctes.

Obtenir un plan d'exécution estimé

Diverses options sont disponibles pour générer un plan d'exécution estimé.

1. Sélectionnez une requête. Cliquez avec le bouton droit sur une fenêtre de requête et sélectionnez Afficher le plan d'exécution estimé.

2. Cliquez sur le Afficher le plan d'exécution estimé option dans la barre d’outils principale.

3. Sélectionnez une requête et appuyez sur la touche CTRL + L combinaison de touches du clavier.

Obtenir un plan d'exécution réel

1. Cliquez sur le Plan d'exécution estimé option dans la barre d’outils principale.

2. Sélectionnez une requête et appuyez sur la touche CTRL + M combinaison de touches du clavier.

Exemple:

Un plan estimé ne peut pas être obtenu pour les requêtes impliquant des tables temporaires, car une requête est réellement exécutée par le moteur de requête pour obtenir le plan d'exécution estimé.

Sélectionnez la requête. Cliquez sur Afficher le plan d'exécution estimé et vous obtiendrez une erreur.

Nom d'objet non valide '#TempTable'.

USE master SELECT * INTO #TempTable FROM master… spt_values; sélectionnez * dans #TempTable; 

En savoir plus sur la programmation de base de données et SQL publiée sur Tech-Recipes.