sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er STATISTICS PROFIL i SQL Server?

I SQL Server kan du bruge SET STATISTICS PROFILE sætning for at vise profiloplysningerne for en T-SQL-sætning.

STATISTICS PROFILE fungerer til ad hoc-forespørgsler, visninger og lagrede procedurer.

Når STATISTICS PROFILE er indstillet til ON , returnerer hver udført forespørgsel sit normale resultatsæt efterfulgt af et ekstra resultatsæt, der viser en profil af forespørgselsudførelsen.

Eksempel

Her er et simpelt eksempel at demonstrere.

SET STATISTICS PROFILE ON;
GO

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

Resultat:

Dette returnerer de samme kolonner som SHOWPLAN_ALL returnerer plus to ekstra (rækkerne og Udfører kolonner).

Det skærmbillede blev taget, da jeg kørte den sætning i Azure Data Studio.

Her er endnu et simpelt eksempel, denne gang kører jeg en sætning i mssql-cli (kommandolinjegrænseflade).

SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats;
GO

Resultat (ved hjælp af lodret output):

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.

Sådan slukker du det

For at slå STATISTICS PROFILE slukket, skal du blot køre det igen med OFF i stedet for ON :

SET STATISTICS PROFILE OFF;
GO

Er STATISTICS PROFILE Forældet?

Selvom den nuværende dokumentation ikke nævner det, SET STATISTICS PROFILE ser ud til at være planlagt til udfasning i fremtidige showplan-versioner.

Ifølge denne gamle MSDN-artikel, SET STATISTICS PROFILE er planlagt til udfasning i fremtidige showplan-versioner, og det anbefales, at du bruger SET STATISTICS XML i stedet.

Også den aktuelle dokumentation for SET STATISTICS XML understøtter dette:

SET STATISTICS PROFIL og SET STATISTICS XML er modstykker til hinanden. Førstnævnte producerer tekstoutput; sidstnævnte producerer XML-output. I fremtidige versioner af SQL Server vil nye planoplysninger om udførelse af forespørgsler kun blive vist gennem SET STATISTICS XML-sætningen, ikke SET STATISTICS PROFILE-sætningen.

Derfor kan det nok betale sig at bruge SET STATISTICS XML i stedet for SET STATISTICS PROFILE hvor det er muligt.


  1. Fejl:Klienten understøtter ikke godkendelsesprotokol anmodet af serveren; overveje at opgradere MySQL-klienten

  2. Tilføj skiftende rækkefarve til rapporten SQL Server Reporting Services

  3. mysqli:kan det forberede flere forespørgsler i en erklæring?

  4. Sådan beregnes margin i MySQL