sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är STATISTICS PROFILE i SQL Server?

I SQL Server kan du använda SET STATISTICS PROFILE uttalande för att visa profilinformationen för en T-SQL-sats.

STATISTICS PROFILE fungerar för ad hoc-frågor, vyer och lagrade procedurer.

När STATISTICS PROFILE är inställd på ON , returnerar varje utförd fråga sin vanliga resultatuppsättning, följt av en ytterligare resultatuppsättning som visar en profil för frågekörningen.

Exempel

Här är ett enkelt exempel att visa.

SET STATISTICS PROFILE ON;
GO

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

Resultat:

Detta returnerar samma kolumner som SHOWPLAN_ALL returnerar plus två extra (raderna och Kör kolumner).

Den skärmdumpen togs när jag körde den satsen i Azure Data Studio.

Här är ett annat enkelt exempel, den här gången kör jag en sats i mssql-cli (kommandoradsgränssnitt).

SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats;
GO

Resultat (med vertikal utdata):

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.

Hur man stänger av det

För att aktivera STATISTICS PROFILE av, kör det helt enkelt igen med OFF istället för ON :

SET STATISTICS PROFILE OFF;
GO

Är STATISTICS PROFILE Utfasad?

Även om den aktuella dokumentationen inte nämner det, SET STATISTICS PROFILE verkar vara schemalagd för utfasning i framtida showplan-versioner.

Enligt denna gamla MSDN-artikel, SET STATISTICS PROFILE är schemalagd för utfasning i framtida showplan-versioner, och det rekommenderas att du använder SET STATISTICS XML istället.

Även den aktuella dokumentationen för SET STATISTICS XML stöder detta:

SET STATISTICS PROFILE och SET STATISTICS XML är motsvarigheter till varandra. Den förra producerar textutdata; den senare producerar XML-utdata. I framtida versioner av SQL Server kommer ny frågekörningsplansinformation endast att visas via SET STATISTICS XML-satsen, inte SET STATISTICS PROFILE-satsen.

Därför lönar det sig förmodligen att använda SET STATISTICS XML istället för SET STATISTICS PROFILE där det är möjligt.


  1. Anpassade triggerbaserade uppgraderingar för PostgreSQL

  2. Skapa en tabell från en fråga med ett annat tabellutrymme (Oracle SQL)

  3. Vad är standardstorleken för en varchar2-ingång till Oracles lagrade procedur, och kan den ändras?

  4. Topp 10 intressanta fakta och tips om MySQL