Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Plan d'exécution SQL Server - qu'est-ce que c'est et comment aide-t-il à résoudre les problèmes de performances ?

Un plan d'exécution SQL Server est utile pour étudier les problèmes de performances avec vos requêtes. Les professionnels des bases de données reçoivent souvent des tickets d'incident ou des plaintes d'utilisateurs indiquant que les requêtes s'exécutent lentement. Les résultats de requête qui prenaient auparavant deux ou trois minutes nécessitent soudainement plus de 30 minutes. Le dépannage peut nécessiter d'enquêter sur des domaines tels que les ressources du serveur (processeur, mémoire), les statistiques, les performances du disque, le blocage, les interblocages et les index. Dans cet article, nous nous concentrerons sur le rôle du plan d'exécution SQL Server dans la résolution des problèmes de performances.

Que se passe-t-il une fois que vous avez soumis T-SQL dans SQL Server ?

Regardons ce qui se passe une fois que vous soumettez une requête à l'aide de Transact-SQL, ou T-SQL, dans SQL Server. Pour les utilisateurs, bien sûr, cela ne fait aucune différence. Les utilisateurs s'attendent à obtenir rapidement des résultats précis, qu'ils interrogent la base de données ou effectuent des recherches sur le Web.

Le workflow de haut niveau d'une requête SQL

  1. L'utilisateur s'authentifie auprès de SQL Server dans une application cliente et soumet une requête.
  2. SQL Server analyse la requête et recherche d'éventuelles erreurs de syntaxe.
  3. L'arborescence d'analyse est traitée plus avant dans Algebrizer, qui résout tous les objets, tables et colonnes de la requête. Il effectue également une vérification des types de données des colonnes. En cas de problème, il renvoie une erreur. Algebrizer génère un arbre de processus de requête et un hachage de requête. Si le plan d'exécution existe déjà, SQL Server utilise ce plan mis en cache et exécute la requête.
  4. Si aucun plan n'existe ou si le plan est obsolète, l'optimiseur de requêtes effectue une optimisation complète basée sur les coûts à l'aide de statistiques, d'une arborescence de processus de requête et de contraintes. Sur la base de ces informations, il prépare le plan d'exécution SQL Server à coût optimisé.
  5. Enfin, le moteur de requête SQL Server exécute la requête conformément au plan d'exécution et renvoie les résultats.

Présentation d'un plan d'exécution SQL Server

Un plan d'exécution SQL Server aide les professionnels des bases de données à dépanner les performances des requêtes et à écrire des requêtes efficaces. Lorsqu'une requête prend beaucoup de temps à s'exécuter, le plan d'exécution de SQL Server peut vous aider à identifier le point auquel la requête prend le plus de ressources et de temps.

Vous pouvez utiliser l'un des éléments suivants pour générer un plan d'exécution :

  1. SQL Server Management Studio
  2. Azure Data Studio
  3. Profilateur SQL Server
  4. Événements prolongés
  5. Vues de gestion dynamiques
  6. Logiciel de surveillance de base de données tiers

Les plans d'exécution générés par #1 à #5 sont similaires. Le logiciel tiers de surveillance de base de données (#6) fournit des fonctions supplémentaires qui utilisent un codage couleur pour identifier les opérateurs coûteux.

SQL Server fournit des plans d'exécution estimés et réels, similaires à ce que vous rencontrez lorsque vous devez réparer votre voiture. Un mécanicien inspecte votre véhicule, puis vous recevez une estimation des travaux en fonction de vos besoins, de l'état du véhicule et du temps et des matériaux approximatifs que le mécanicien pense que la réparation prendra. Bien sûr, le coût et le temps réels peuvent différer, comme c'est le cas avec les plans d'exécution estimés et réels de SQL Server.

Plans d'exécution estimés

Sans exécuter la requête, vous pouvez obtenir un plan d'exécution SQL Server estimé (logique) basé sur les statistiques SQL Server. Dans SQL Server Management Studio (SSMS), suivez ces étapes :

  1. Mettre en surbrillance la requête (au cas où vous voudriez le plan d'exécution pour une requête spécifique).
  2. Cliquez sur le bouton Afficher le plan d'exécution estimé (raccourci clavier Ctrl + L), comme indiqué ci-dessous.

Parfois, SQL Server est incapable de produire un plan estimé; par exemple, si un paramètre est utilisé sans préciser sa valeur dans la requête, ou si une table temporaire n'est pas déclarée.

Plan d'exécution réel

Une fois que vous avez soumis la requête à SQL Server, vous pouvez obtenir un plan d'exécution réel représentant les étapes suivies par SQL Server pour exécuter la requête. Comme dans le scénario de réparation de véhicule, cela équivaut à la facture réelle que vous recevez.

Pour obtenir le plan d'exécution réel, suivez les étapes ci-dessous dans SSMS avant d'exécuter la requête.

  1. Sélectionnez la requête.
  2. Cliquez sur Afficher le plan d'exécution réel bouton (raccourci clavier Ctrl + M ), comme indiqué ci-dessus.

Formats des plans d'exécution SQL Server

Par défaut, les procédures SSMS expliquées ci-dessus génèrent un plan d'exécution SQL Server au format graphique. Mais vous avez la possibilité de visualiser les plans d'exécution dans trois formats différents :

  1. Graphique
  2. XML
  3. Texte

Examinons chacun de ces formats.

1. Plan d'exécution graphique

Le plan graphique décrit tous les composants, y compris le flux de données, comme indiqué ci-dessous.

Opérateurs

Les opérateurs sont affichés sous forme d'icônes. Chaque opérateur est désigné pour effectuer une tâche spécifique. Par exemple, l'optimiseur de requête dans SQL Server peut effectuer une analyse de table, une analyse d'index et une recherche. Voici à quoi ressemble un opérateur de recherche d'index clusterisé lorsqu'il extrait des données d'un index sur la table [AdventureWorks2019].[HumanResources] :

Coût en pourcentage

Le plan graphique montre également un pourcentage de coût - ici, 99 % pour la recherche d'index clusterisé - associé à l'opérateur. Ce coût est relatif aux autres opérateurs utilisés lors de l'exécution de la requête.

Flèches de flux de données

Les flèches relient les opérateurs, leur largeur reflétant le nombre de lignes de données se déplaçant d'un opérateur à l'autre.

Par exemple, supposons que votre requête ne génère qu'une seule ligne de sortie mais qu'elle prenne beaucoup de temps à se terminer. En déplaçant la souris sur la flèche du flux de données dans le plan d'exécution, vous constatez que le nombre de lignes lues se compte en millions. Cela représente un énorme déséquilibre dans l'utilisation des ressources et révèle un domaine nécessitant une optimisation.

Info-bulles

Comme indiqué ci-dessous, lorsque vous passez la souris sur un opérateur, des info-bulles apparaissent avec plus de statistiques sur le flux de données.

Fenêtre Propriétés

La fenêtre Propriétés affiche des informations détaillées sur les opérateurs et leurs composants. Il s'agit d'un sur-ensemble des info-bulles.

2. Plan d'exécution SQL Server au format XML

Le plan d'exécution XML est dans un format spécifique et structuré. Bien que le format XML soit visuellement moins intuitif, il contient tous les détails en XML et ne nécessite aucune étape supplémentaire pour afficher les propriétés et les info-bulles. Vous pouvez facilement convertir le format XML en format graphique et vice versa.

Pour convertir un plan d'exécution graphique au format XML, faites un clic droit dessus et choisissez Afficher le plan d'exécution XML , comme indiqué ci-dessous.

Le résultat est le plan d'exécution structuré au format XML suivant.

Les commandes suivantes génèrent également le plan d'exécution au format XML :

  • Pour le forfait estimé :SET SHOWPLAN_XML ON
  • Pour le plan réel : SET STATISTICS_XML ON

3. Plan d'exécution SQL Server au format texte

Vous pouvez générer le plan d'exécution de plusieurs manières :

  • ACTIVER SHOWPLAN_TEXT

Cette commande génère la estimation plan d'exécution, sans des informations détaillées sur l'exécution de la requête. Il est destiné à des applications telles que l'utilitaire sqlcmd.

  • ACTIVER SHOWPLAN_ALL

Cette commande génère la estimation plan d'exécution, avec des informations détaillées sur tous les opérateurs et opérations sous forme de tableau.

  • DÉFINIR LE PROFIL DES STATISTIQUES

Cette commande génère un plan d'exécution réel, après exécution de la requête, sous forme de tableau.

Pourquoi les plans d'exécution estimés et réels de SQL Server sont-ils différents ?

Les plans d'exécution estimés et réels sont généralement similaires, bien que certaines circonstances puissent les faire différer.

Statistiques obsolètes

Les statistiques obsolètes sont la principale raison des différences entre les plans d'exécution estimés et réels.

L'optimiseur de requête utilise des statistiques pour créer un plan d'exécution de requête rentable et optimisé. Si vos statistiques ne sont pas mises à jour ou si votre échantillonnage de données n'est pas approprié, l'optimiseur de requêtes effectuera une optimisation complète et créera un plan d'exécution basé sur les anciennes informations. Vous pouvez également obtenir un plan d'exécution inefficace susceptible d'entraîner des problèmes de performances des requêtes.

Des statistiques obsolètes se produisent parfois lorsque les données changent fréquemment et que les statistiques ne sont pas mises à jour en fonction de la maintenance de l'index.

Plan d'exécution SQL Server série ou parallèle

Au moment de la compilation, l'optimiseur de requête construit un plan d'exécution et produit un plan en série ou parallèle en fonction du coût de la requête et du seuil de coût du parallélisme. Alors que le plan d'exécution peut être le même pour les modes série et parallèle, SQL Server décide entre eux en fonction des ressources et de l'activité du serveur.

Estimations invalides

Comme mentionné précédemment, Algebrizer lie les noms des objets avant d'exécuter la requête SQL. Supposons que vous spécifiez qu'une table nommée test sera CRÉÉE au moment de l'exécution, puis essayez de générer un plan d'exécution estimé. Étant donné que cette table n'existe pas, vous recevrez un message d'erreur, comme indiqué ci-dessous.

Utilisation du plan d'exécution

En résumé, vous pouvez générer un plan d'exécution SQL Server aux formats graphique, XML et texte et l'utiliser pour vous aider à résoudre les problèmes de performances de votre base de données.

Les plans d'exécution des requêtes sont les étapes principales de l'identification du flux de travail, des opérateurs et des composants des requêtes afin que vous puissiez ajuster vos requêtes pour toute amélioration possible. Pour plus d'informations sur l'utilisation des plans d'exécution, consultez notre article : Comment lire et analyser les plans d'exécution.