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

SQL Server SHOWPLAN_ALL


No SQL Server, você pode usar o SET SHOWPLAN_ALL instrução para retornar informações detalhadas sobre como uma instrução T-SQL é executada, bem como estimativas dos requisitos de recursos para as instruções.

SHOWPLAN_ALL retorna informações como um conjunto de linhas que formam uma árvore hierárquica que representa as etapas executadas pelo processador de consulta do SQL Server à medida que ele executa cada instrução. É semelhante a SHOWPLAN_TEXT , exceto que SHOWPLAN_ALL retorna informações mais detalhadas (e deve ser usado com aplicativos que podem manipular sua saída).

Você pode definir SHOWPLAN_ALL para ON ou OFF .

Quando SHOWPLAN_ALL está ON , todas as instruções T-SQL subsequentes não serão executadas. Em vez disso, o SQL Server retorna informações de execução para a instrução (sem executá-la).

É importante observar que SHOWPLAN_ALL fornece estimativas dos requisitos de recursos e que os requisitos de recursos reais podem diferir quando a instrução é de fato executada.

Exemplo


Aqui está um exemplo para demonstrar.
SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

Observe que SET SHOWPLAN_ALL não pode ser especificado dentro de um procedimento armazenado e deve ser a única instrução em um lote.

Veja como é o resultado no Azure Data Studio:

E aqui está o que parece no mssql-cli (interface de linha de comando) ao usar a saída vertical:
Commands completed successfully.
-[ RECORD 1 ]-------------------------
StmtText           | 
SELECT * FROM Cats;
StmtId             | 1
NodeId             | 1
Parent             | 0
PhysicalOp         | NULL
LogicalOp          | NULL
Argument           | 1
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 ]-------------------------
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.

Há muitas colunas, então usei a saída vertical aqui para facilitar a leitura.

Se minha consulta fosse mais complexa, mais linhas seriam retornadas.

Aqui está um exemplo de uma consulta (um pouco) mais complexa.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Resultado:

Como desativá-lo


Você pode desativá-lo usando SET SHOWPLAN_ALL OFF .

Depois de fazer isso, as instruções subsequentes serão executadas normalmente.
SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Resultado:
Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

Descontinuado ou não?


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

No entanto, esse artigo do MSDN é para o SQL Server 2008 R2 e, enquanto escrevo isso, não parece ter sido preterido no SQL Server 2019. Na verdade, a documentação atual não menciona a depreciação e não está incluída quando executo uma lista de itens obsoletos no SQL Server.

De qualquer forma, provavelmente vale a pena ter isso em mente antes de usá-lo em versões futuras.

Plano de Execução Gráfica


Se você estiver usando uma ferramenta gráfica, como SSMS ou Azure Data Studio, poderá ter a opção de exibir o plano de execução de consulta gráfica estimado para a consulta atual.
  • No SSMS, você pode usar Ctrl + L para fazer isso. Ou você pode clicar em Exibir plano de execução estimado ícone ou clique com o botão direito do mouse na janela de consulta e selecione Exibir plano de execução estimado .
  • No Azure Data Studio, você pode clicar no botão Explicar botão acima da janela de consulta.

Você também pode usar SET SHOWPLAN_XML ON para habilitá-lo e SET SHOWPLAN_XML OFF para desativá-lo.