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

Comment lire et analyser les plans d'exécution SQL Server

Les plans d'exécution SQL Server sont une passerelle pour l'optimiseur de requêtes et les exécutions de requêtes pour les professionnels des bases de données. Ils révèlent le traitement des requêtes et les phases impliquées telles que les tables affectées, les index, les statistiques, les types de jointures, le nombre de lignes affectées, le traitement des requêtes, le tri et la récupération des données.

Dans un article précédent, Plan d'exécution SQL Server :de quoi s'agit-il et comment résout-il les problèmes de performances ? nous avons exploré le flux de travail d'exécution des requêtes de haut niveau, les différents types de plans d'exécution (graphique, XML et texte), ainsi que les plans d'exécution réels et estimés.

Nous allons maintenant explorer les éléments que vous devez savoir lors de l'évaluation des plans d'exécution de SQL Server et la meilleure façon d'interpréter les informations.

Lecture d'un plan d'exécution graphique SQL Server

Généralement, on lit les plans d'exécution de droite à gauche. Vous commencez par l'opérateur de plan d'exécution le plus à droite en haut et vous vous déplacez vers la gauche. Il vous aide à suivre le flux de données logique dans la requête.

Supposons que vous exécutiez la requête suivante dans un exemple de base de données [AdventureWorks2019] et que vous affichiez le plan d'exécution réel.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

La requête récupère les données de la table [Sales].[SalesOrderDetail] pour les commandes dont le prix unitaire est supérieur à 1 000.

Si nous lisons le plan d'exécution de droite à gauche, nous retiendrons ce qui suit :

  • Le premier opérateur est le Clustered Index Scan qui lit les données de la table [Sales].[SalesOrderDetail]. Lorsque vous placez le pointeur de votre souris sur la flèche reliant l'analyse de l'index cluster et l'opérateur supérieur, il renvoie le nombre estimé et réel de lignes, ainsi que la taille des données estimée.

  • Il transmet les données de l'opérateur Clustered Index Scan à l'opérateur Top transmet les 10 lignes à l'opérateur SELECT.

En interne, SQL Server exécute le plan de gauche à droite. Si vous êtes intéressé par les ordres physiques de l'opérateur, vous devriez lire un plan d'exécution de gauche à droite. Chaque opérateur demande des données à l'opérateur suivant. Par exemple, dans le scénario ci-dessus, l'opérateur Top demande des données à partir de Clustered Index Scan. L'analyse de l'index clusterisé renvoie les lignes de la table [Sales].[SalesOrderDetail] qui satisfont à  condition de clause.

Dans le cas où plusieurs branches fusionnent dans un plan d'exécution, vous devez suivre l'approche de droite à gauche, de haut en bas.

Coûts de l'opérateur

Chaque opérateur d'un plan d'exécution SQL Server est associé à un coût. Le coût de l'opérateur est relatif aux autres coûts du plan d'exécution. En règle générale, nous devons nous concentrer sur l'opérateur coûteux et ajuster la requête en fonction de celui-ci.

En cas de plan d'exécution compliqué, il peut être difficile d'identifier l'opérateur coûteux. Dans ce cas, vous pouvez utiliser SET SHOWPLAN_ALL ON, et il fournira des informations sous forme de tableau.

Vous pouvez également utiliser le [texte Stmt] pour décomposer le plan d'exécution à chaque niveau d'opérateur et d'instruction.

SQL Server Management Studio (SSMS) offre également la possibilité de rechercher un opérateur en fonction de critères de recherche. Pour ce faire, faites un clic droit sur le plan d'exécution et sélectionnez Rechercher un nœud. Cela ouvrira une fenêtre avec différentes conditions de recherche. Spécifiez votre exigence et elle pointera vers le nœud particulier, comme indiqué ci-dessous.

Vous pouvez également utiliser Azure Data Studio et accéder à Exécuter la requête actuelle avec le plan réel  sous la palette Commande. Cela donne un plan d'exécution réel sous une forme compacte, ainsi que les principales opérations pour identifier rapidement les opérateurs coûteux.

Analyse du plan de spectacle

Vous pouvez identifier une estimation de cardinalité inexacte pour enquêter sur les plans d'exécution problématiques. Cela vous donnera de brèves informations sur la recherche d'un opérateur particulier et des recommandations dans l'onglet Analyse ShowPlan. Vous pouvez trier le résultat dans les colonnes différence, réel et estimé pour trouver le problème et les recommandations pour l'opérateur spécifique dans le plan d'exécution. Ceci est disponible à partir de SSMS 17.4.

Pour ce faire, faites un clic droit sur le plan d'exécution, puis cliquez sur Analyser le plan d'exécution réel.

Ensuite, cliquez sur le lien hypertexte sous Détails de la recherche . Cela expliquera les scénarios possibles d'imprécision d'estimation et les solutions de contournement pour améliorer ces estimations. C'est un bon point de départ pour les problèmes d'estimation de cardinalité.

Comparer Showplan

Supposons que vous ayez identifié un problème dans le plan d'exécution et que vous ayez mis en œuvre une solution pour y remédier. Mais, comment allez-vous comparer le plan d'exécution précédent (comment c'était avant la mise en œuvre de la solution) et le plan d'exécution actuel ? Le SSMS Compare Showplan vous offre la possibilité de comparer deux plans d'exécution. Il met en évidence les similitudes et les différences entre ces plans.

Habituellement, les administrateurs de base de données reçoivent un appel des développeurs indiquant qu'une requête particulière fonctionne correctement en production, mais prend beaucoup de temps dans un environnement d'assurance qualité avec les mêmes paramètres. Un autre cas d'utilisation est la migration vers une version plus récente de SQL Server. Supposons qu'après la migration, vous rencontriez des problèmes avec une requête qui fonctionne correctement dans une version SQL inférieure. Vous pouvez également utiliser cet outil pour comparer les plans d'exécution de différentes versions SQL et niveaux de correctifs.

Enregistrez le plan d'exécution dans un SQLPlan extension. Après cela, vous pouvez cliquer avec le bouton droit sur un autre plan d'exécution et sélectionner Comparer Showplan .

Plans d'exécution en direct dans SSMS

Vous pouvez activer un plan d'exécution en direct d'une requête active. Cela vous donnera des statistiques en temps réel sur le flux de données vers différents opérateurs. Dans les statistiques d'exécution de l'exécution, vous pouvez suivre le temps écoulé et le nombre de lignes. C'est une excellente fonctionnalité pour le dépannage et le débogage des problèmes de performances. Vous pouvez utiliser les statistiques de requête en direct de SQL Server 2016 et supérieur.

Remarque :Vous devez utiliser la dernière version de SSMS. Reportez-vous aux documents Microsoft pour télécharger la dernière version de SSMS.

  • Dernière version actuelle :SSMS 18.7.1

Pour les statistiques de requête en direct, activez Inclure les statistiques de requête en direct à l'aide de la barre d'outils SSMS.

Vous pouvez également afficher le plan d'exécution en direct à partir du Moniteur d'activité . Dans le moniteur d'activité, sélectionnez le processus souhaité, cliquez dessus avec le bouton droit pour afficher le menu et choisissez Afficher le plan d'exécution en direct.

Cela vous donne des estimations de requêtes en direct ainsi que le flux de données et les pourcentages d'achèvement des opérateurs individuels. Habituellement, nous attendons la fin de l'exécution de la requête et visualisons le plan d'exécution réel. Mais supposons que votre requête prenne plus de 30 minutes pour produire des résultats. Dans ce cas, vous pouvez utiliser les statistiques de requête en direct pour suivre les opérateurs individuels, le flux de données et indiquer quel opérateur prend du temps pour terminer la requête. Par exemple, comme indiqué ci-dessous, la requête s'exécute pendant 12 minutes 48 secondes et la requête est estimée à 20 % terminée. Au niveau de l'opérateur, le balayage d'index et le spool de comptage de lignes sont terminés à 41 %. Les lignes pointillées montrent le mouvement des données.

Examen de l'utilisation du plan d'exécution SQL Server

Les plans d'exécution SQL Server sont extrêmement utiles pour dépanner et optimiser les requêtes lentes. Chaque professionnel des bases de données doit savoir comment analyser et comprendre les informations une fois que le plan d'exécution est disponible. Comme indiqué précédemment, il existe divers outils dans SSMS et Azure Data Studio pour vous aider à examiner et à résoudre les problèmes de performances. La fonctionnalité Comparer le plan en particulier est à exploiter lorsque vous commencez à apporter des modifications et à évaluer les performances.