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

Che cos'è il PROFILO STATISTICHE in SQL Server?

In SQL Server è possibile utilizzare il SET STATISTICS PROFILE per visualizzare le informazioni sul profilo per un'istruzione T-SQL.

STATISTICS PROFILE funziona per query, visualizzazioni e stored procedure ad hoc.

Quando STATISTICS PROFILE è impostato su ON , ogni query eseguita restituisce il proprio set di risultati regolare, seguito da un set di risultati aggiuntivo che mostra un profilo dell'esecuzione della query.

Esempio

Ecco un semplice esempio da dimostrare.

SET STATISTICS PROFILE ON;
GO

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

Risultato:

Questo restituisce le stesse colonne che SHOWPLAN_ALL restituisce più due extra (le Righe e Esegue colonne).

Lo screenshot è stato acquisito durante l'esecuzione dell'istruzione in Azure Data Studio.

Ecco un altro semplice esempio, questa volta eseguo un'istruzione in mssql-cli (interfaccia a riga di comando).

SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats;
GO

Risultato (usando l'output 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.

Come spegnerlo

Per trasformare STATISTICS PROFILE off, eseguilo semplicemente di nuovo usando OFF invece di ON :

SET STATISTICS PROFILE OFF;
GO

È STATISTICS PROFILE Deprecato?

Sebbene la documentazione attuale non ne faccia menzione, SET STATISTICS PROFILE sembra essere programmato per il ritiro nelle versioni future dello showplan.

Secondo questo vecchio articolo MSDN, SET STATISTICS PROFILE è programmato per il ritiro nelle versioni future di showplan e si consiglia di utilizzare SET STATISTICS XML invece.

Inoltre, la documentazione corrente per SET STATISTICS XML supporta questo:

SET STATISTICS PROFILE e SET STATISTICS XML sono controparti l'uno dell'altro. Il primo produce output testuale; quest'ultimo produce output XML. Nelle versioni future di SQL Server, le nuove informazioni sul piano di esecuzione delle query verranno visualizzate solo tramite l'istruzione SET STATISTICS XML, non l'istruzione SET STATISTICS PROFILE.

Pertanto, probabilmente conviene usare SET STATISTICS XML invece di SET STATISTICS PROFILE ove possibile.