Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que é PERFIL DE ESTATÍSTICAS no SQL Server?


No SQL Server, você pode usar o SET STATISTICS PROFILE instrução para exibir as informações de perfil para uma instrução T-SQL.

STATISTICS PROFILE funciona para consultas ad hoc, exibições e procedimentos armazenados.

Quando STATISTICS PROFILE está definido como ON , cada consulta executada retorna seu conjunto de resultados regular, seguido por um conjunto de resultados adicional que mostra um perfil da execução da consulta.

Exemplo


Aqui está um exemplo simples para demonstrar.
SET STATISTICS PROFILE ON;
GO

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

Resultado:

Isso retorna as mesmas colunas que SHOWPLAN_ALL retorna mais dois extras (as Linhas e Executa colunas).

Essa captura de tela foi tirada quando executei essa instrução no Azure Data Studio.

Aqui está outro exemplo simples, desta vez eu executo uma instrução no mssql-cli (interface de linha de comando).
SET STATISTICS PROFILE ON;
GO

SELECT * FROM Cats;
GO

Resultado (usando saída vertical):
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.

Como desativá-lo


Para ativar STATISTICS PROFILE desligado, basta executá-lo novamente usando OFF em vez de ON :
SET STATISTICS PROFILE OFF;
GO

É STATISTICS PROFILE Descontinuado?


Embora a documentação atual não faça menção a isso, SET STATISTICS PROFILE parece estar programado para descontinuação em futuras versões do plano de exibição.

De acordo com este antigo artigo do MSDN, SET STATISTICS PROFILE está programado para descontinuação em futuras versões do plano de exibição, e é recomendado que você use SET STATISTICS XML em vez de.

Além disso, a documentação atual para SET STATISTICS XML suporta isso:

SET STATISTICS PROFILE e SET STATISTICS XML são equivalentes um do outro. O primeiro produz saída textual; o último produz saída XML. Em versões futuras do SQL Server, as novas informações do plano de execução de consulta serão exibidas apenas por meio da instrução SET STATISTICS XML, não pela instrução SET STATISTICS PROFILE.

Portanto, provavelmente vale a pena usar SET STATISTICS XML em vez de SET STATISTICS PROFILE onde possível.