Dans SQL Server, vous pouvez utiliser le SET SHOWPLAN_ALL
instruction pour renvoyer des informations détaillées sur la façon dont une instruction T-SQL est exécutée, ainsi que des estimations des besoins en ressources pour les instructions.
SHOWPLAN_ALL
renvoie des informations sous la forme d'un ensemble de lignes qui forment une arborescence hiérarchique représentant les étapes suivies par le processeur de requêtes SQL Server lors de l'exécution de chaque instruction. C'est similaire à SHOWPLAN_TEXT
, sauf que SHOWPLAN_ALL
renvoie des informations plus détaillées (et est destiné à être utilisé avec des applications capables de gérer sa sortie).
Vous pouvez définir SHOWPLAN_ALL
soit ON
ou OFF
.
Lorsque SHOWPLAN_ALL
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).
Il est important de noter que SHOWPLAN_ALL
fournit des estimations des besoins en ressources, et que les besoins réels en ressources peuvent différer lorsque l'instruction est en fait exécutée.
Exemple
Voici un exemple pour illustrer.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Notez que SET SHOWPLAN_ALL
ne peut pas être spécifié dans une procédure stockée et doit être la seule instruction d'un lot.
Voici à quoi ressemble le résultat dans Azure Data Studio :
Et voici à quoi cela ressemble dans mssql-cli (interface de ligne de commande) lors de l'utilisation de la sortie verticale :
Commands completed successfully. -[ RECORD 1 ]------------------------- StmtText | SELECT * FROM Cats; StmtId | 1 NodeId | 1 Parent | 0 PhysicalOp | NULL LogicalOp | NULL Argument | 1 DefinedValues | NULL EstimateRows | 3 EstimateIO | NULL EstimateCPU | NULL AvgRowSize | NULL TotalSubtreeCost | 0.0032853 OutputList | NULL Warnings | NULL Type | SELECT Parallel | 0 EstimateExecutions | NULL -[ RECORD 2 ]------------------------- StmtText | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])) StmtId | 1 NodeId | 2 Parent | 1 PhysicalOp | Clustered Index Scan LogicalOp | Clustered Index Scan Argument | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]) DefinedValues | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] EstimateRows | 3 EstimateIO | 0.003125 EstimateCPU | 0.0001603 AvgRowSize | 142 TotalSubtreeCost | 0.0032853 OutputList | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] Warnings | NULL Type | PLAN_ROW Parallel | 0 EstimateExecutions | 1 (2 rows affected) Commands completed successfully.
Il y a beaucoup de colonnes, j'ai donc utilisé la sortie verticale ici pour faciliter la lecture.
Si ma requête était plus complexe, plus de lignes seraient renvoyées.
Voici un exemple de requête (légèrement) plus complexe.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Résultat :
Comment l'éteindre
Vous pouvez le désactiver en utilisant SET SHOWPLAN_ALL OFF
.
Une fois que vous avez fait cela, les instructions suivantes s'exécuteront normalement.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Résultat :
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Obsolète ou non ?
Selon cet ancien article MSDN, SET SHOWPLAN_ALL
est prévu pour être obsolète dans les futures versions de showplan, et il est recommandé d'utiliser SET SHOWPLAN_XML
à la place.
Cependant, cet article MSDN concerne SQL Server 2008 R2, et au moment où j'écris ceci, il ne semble pas avoir été obsolète dans SQL Server 2019. En fait, la documentation actuelle ne fait aucune mention de l'obsolescence, et elle n'est pas incluse. lorsque j'exécute une liste d'éléments obsolètes dans SQL Server.
Quoi qu'il en soit, il vaut probablement la peine de garder cela à l'esprit avant de l'utiliser dans les versions futures.
Plan d'exécution graphique
Si vous utilisez un outil graphique tel que SSMS ou Azure Data Studio, vous pouvez avoir la possibilité d'afficher le plan d'exécution de requête graphique estimé pour la requête actuelle.
- 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é .
- Dans Azure Data Studio, vous pouvez cliquer sur Explain bouton au-dessus de la fenêtre de requête.
Vous pouvez également utiliser SET SHOWPLAN_XML ON
pour l'activer, et SET SHOWPLAN_XML OFF
pour le désactiver.