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

Qu'est-ce que le PROFIL STATISTIQUE dans SQL Server ?

Dans SQL Server, vous pouvez utiliser le SET STATISTICS PROFILE pour afficher les informations de profil d'une instruction T-SQL.

STATISTICS PROFILE fonctionne pour les requêtes ad hoc, les vues et les procédures stockées.

Lorsque STATISTICS PROFILE est réglé sur ON , chaque requête exécutée renvoie son jeu de résultats normal, suivi d'un jeu de résultats supplémentaire qui affiche un profil de l'exécution de la requête.

Exemple

Voici un exemple simple à démontrer.

SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Résultat :

Cela renvoie les mêmes colonnes que SHOWPLAN_ALL renvoie plus deux supplémentaires (les Rows et exécute colonnes).

Cette capture d'écran a été prise lorsque j'ai exécuté cette instruction dans Azure Data Studio.

Voici un autre exemple simple, cette fois j'exécute une instruction dans mssql-cli (interface de ligne de commande).

SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats;
GO

Résultat (en utilisant la sortie verticale) :

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
-[ RECORD 1 ]-------------------------
Rows               | 3
Executes           | 1
StmtText           | SELECT * FROM Cats
StmtId             | 1
NodeId             | 1
Parent             | 0
PhysicalOp         | NULL
LogicalOp          | NULL
Argument           | NULL
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 ]-------------------------
Rows               | 3
Executes           | 1
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.

Comment l'éteindre

Pour activer STATISTICS PROFILE off, relancez-le simplement en utilisant OFF au lieu de ON :

SET STATISTICS PROFILE OFF;
GO

Est STATISTICS PROFILE Obsolète ?

Bien que la documentation actuelle n'en fasse aucune mention, SET STATISTICS PROFILE semble devoir être abandonné dans les futures versions de showplan.

Selon cet ancien article MSDN, SET STATISTICS PROFILE est prévu pour être obsolète dans les futures versions de showplan, et il est recommandé d'utiliser SET STATISTICS XML à la place.

Aussi, la documentation actuelle pour SET STATISTICS XML prend en charge ceci :

SET STATISTICS PROFILE et SET STATISTICS XML sont des équivalents l'un de l'autre. Le premier produit une sortie textuelle; ce dernier produit une sortie XML. Dans les futures versions de SQL Server, les nouvelles informations sur le plan d'exécution des requêtes ne seront affichées que via l'instruction XML SET STATISTICS, et non via l'instruction SET STATISTICS PROFILE.

Par conséquent, il est probablement avantageux d'utiliser SET STATISTICS XML au lieu de SET STATISTICS PROFILE si possible.