Dans SQL Server, vous pouvez utiliser le SET SHOWPLAN_XML
pour renvoyer des informations détaillées sur la manière dont une instruction T-SQL sera exécutée, sous la forme d'un document XML bien défini.
C'est similaire à SHOWPLAN_ALL
, sauf que SHOWPLAN_ALL
renvoie son ensemble de données de lignes qui forment un arbre hiérarchique.
Vous pouvez définir SHOWPLAN_XML
soit ON
ou OFF
.
Lorsque SHOWPLAN_XML
est ON
, toutes les instructions T-SQL suivantes ne sont pas exécutées. Au lieu de cela, SQL Server renvoie les informations d'exécution de l'instruction (sans l'exécuter).
Exemple
Voici un exemple pour illustrer.
SET SHOWPLAN_XML ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Notez que SET SHOWPLAN_XML
ne peut pas être spécifié dans une procédure stockée et doit être la seule instruction d'un lot.
Le résultat que vous obtenez peut dépendre de l'outil que vous utilisez pour accéder à SQL Server.
Lorsque je l'exécute dans Azure Data Studio, je peux cliquer sur les différents onglets pour obtenir une vue différente du résultat.
Les Résultats affiche la chaîne XML brute :
Cliquer sur la ligne ouvre le document XML dans un nouvel onglet :
Le plan de requête l'onglet affiche une représentation graphique du résultat :
Les Principales opérations L'onglet présente les données sous forme de tableau qui vous permet de trier les données selon différentes métriques :
Ne fonctionne pas ?
Si cela ne fonctionne pas pour vous, assurez-vous d'inclure le plan d'exécution réel n'est pas sélectionné dans SSMS. Lorsque cette option est sélectionnée, SET SHOWPLAN_XML ON
ne produit pas de sortie XML Showplan.
Comment l'éteindre
Vous pouvez le désactiver en utilisant SET SHOWPLAN_XML OFF
.
Une fois que vous avez fait cela, les instructions suivantes s'exécuteront normalement.
SET SHOWPLAN_XML OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Résultat :
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Plan d'exécution dans les interfaces graphiques
Si vous utilisez un outil graphique tel que SSMS ou Azure Data Studio, vous pouvez disposer d'une option de raccourci pour afficher le plan d'exécution de requête graphique estimé. Cela vous permet de visualiser le plan de requête sans avoir besoin d'exécuter SET SHOWPLAN_XML ON
.
Pour exécuter un plan de requête estimé :
- Dans SSMS, vous pouvez utiliser Ctrl + L pour faire ça. Ou vous pouvez cliquer sur Afficher le plan d'exécution estimé ou faites un clic droit dans la fenêtre de requête et sélectionnez Afficher le plan d'exécution estimé . Cela vous évitera d'avoir à tourner
SHOWPLAN_XML
activé et désactivé dans votre code. - Dans Azure Data Studio, vous pouvez cliquer sur Explain bouton au-dessus de la fenêtre de requête.
Vous pouvez également exécuter un véritable plan de requête :
- Dans SSMS, sur la requête menu, cliquez sur Inclure le plan d'exécution réel ou cliquez sur Inclure le plan d'exécution réel bouton de la barre d'outils.
- Dans Azure Data Studio, accédez à Affichage> Palette de commandes et tapez Exécuter la requête actuelle avec le plan réel .
Notez que si Inclure le plan d'exécution réel est sélectionné dans SSMS, le SET SHOWPLAN_XML ON
L'option ne produit pas de sortie XML Showplan. Essayez d'effacer l'option Inclure le plan d'exécution réel avant d'utiliser ce SET
option.
Cependant, je trouve qu'Azure Data Studio fait le contraire SHOWPLAN_XML ON
semble remplacer l'option Exécuter la requête actuelle avec le plan réel option, sauf si je lance Explain premier (plan de requête estimé), après quoi Exécuter la requête actuelle avec le plan réel fonctionne soudainement (les lignes réelles et exécutions réelles colonnes des Top Operations tab retourne les données appropriées).
Il est probablement préférable de désactiver l'option XML Showplan avant d'utiliser d'autres méthodes pour récupérer le plan de requête.