Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist STATISTICS PROFILE in SQL Server?

In SQL Server können Sie das SET STATISTICS PROFILE verwenden -Anweisung, um die Profilinformationen für eine T-SQL-Anweisung anzuzeigen.

STATISTICS PROFILE funktioniert für Ad-hoc-Abfragen, Ansichten und gespeicherte Prozeduren.

Wenn STATISTICS PROFILE auf ON eingestellt ist , gibt jede ausgeführte Abfrage ihre reguläre Ergebnismenge zurück, gefolgt von einer zusätzlichen Ergebnismenge, die ein Profil der Abfrageausführung zeigt.

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung.

SET STATISTICS PROFILE ON;
GO

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

Ergebnis:

Dies gibt dieselben Spalten zurück wie SHOWPLAN_ALL gibt plus zwei zusätzliche zurück (die Zeilen und Hinrichtungen Spalten).

Dieser Screenshot wurde aufgenommen, als ich diese Anweisung in Azure Data Studio ausgeführt habe.

Hier ist ein weiteres einfaches Beispiel, dieses Mal führe ich eine Anweisung in mssql-cli (Befehlszeilenschnittstelle) aus.

SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats;
GO

Ergebnis (bei vertikaler Ausgabe):

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.

Wie man es ausschaltet

STATISTICS PROFILE umschalten aus, führen Sie es einfach erneut mit OFF aus statt ON :

SET STATISTICS PROFILE OFF;
GO

Ist STATISTICS PROFILE Veraltet?

Obwohl die aktuelle Dokumentation dies nicht erwähnt, SET STATISTICS PROFILE scheint in zukünftigen Showplan-Versionen als veraltet markiert zu sein.

Laut diesem alten MSDN-Artikel SET STATISTICS PROFILE soll in zukünftigen Showplan-Versionen veraltet sein, und es wird empfohlen, dass Sie SET STATISTICS XML verwenden stattdessen.

Außerdem die aktuelle Dokumentation für SET STATISTICS XML unterstützt dies:

SET STATISTICS PROFILE und SET STATISTICS XML sind Gegenstücke zueinander. Ersteres erzeugt eine Textausgabe; letzteres erzeugt eine XML-Ausgabe. In zukünftigen Versionen von SQL Server werden Informationen zum neuen Abfrageausführungsplan nur über die SET STATISTICS XML-Anweisung angezeigt, nicht über die SET STATISTICS PROFILE-Anweisung.

Daher lohnt es sich wahrscheinlich, SET STATISTICS XML zu verwenden statt SET STATISTICS PROFILE wo möglich.