Partilhar via


SET SHOWPLAN_ALL (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Faz com que o Microsoft SQL Server não execute Transact-SQL instruções. Em vez disso, o SQL Server devolve informações detalhadas sobre como as instruções seriam executadas (um plano de consulta) e fornece estimativas dos requisitos de recursos para as instruções e linhas esperadas (estimativa de cardinalidade).

Transact-SQL convenções de sintaxe

Sintaxe

  
SET SHOWPLAN_ALL { ON | OFF }  

Observações

A definição do SET SHOWPLAN_ALL é definida em tempo de execução ou execução e não em tempo de análise sintética.

Quando SET SHOWPLAN_ALL está LIGADO, o SQL Server devolve a informação de execução de cada instrução sem a executar, e Transact-SQL instruções não são executadas. Depois de esta opção ser ativada, a informação sobre todas as instruções Transact-SQL subsequentes é devolvida até que a opção seja desativada. Por exemplo, se uma instrução CREATE TABLE for executada enquanto SET SHOWPLAN_ALL está ON, o SQL Server devolve uma mensagem de erro de uma instrução SELECT subsequente envolvendo essa mesma tabela, informando os utilizadores de que a tabela especificada não existe. Portanto, as referências subsequentes a esta tabela falham. Quando o SET SHOWPLAN_ALL está DESLIGADO, o SQL Server executa as instruções sem gerar um relatório.

SET SHOWPLAN_ALL destina-se a ser usado por aplicações escritas para gerir a sua saída. Use o SHOWPLAN_TEXT SET para devolver uma saída legível para aplicações do prompt de comandos Microsoft Win32, como a utilidade osql .

SET SHOWPLAN_TEXT e SET SHOWPLAN_ALL não podem ser especificados dentro de um procedimento armazenado; Devem ser as únicas declarações num lote.

O SET SHOWPLAN_ALL devolve informação como um conjunto de linhas que formam uma árvore hierárquica que representa os passos dados pelo processador de consultas SQL Server à medida que executa cada instrução. Cada instrução refletida na saída contém uma única linha com o texto da declaração, seguida de várias linhas com os detalhes dos passos de execução. A tabela mostra as colunas que a saída contém.

Nome da coluna Description
StmtText Para linhas que não são do tipo PLAN_ROW, esta coluna contém o texto da declaração Transact-SQL. Para linhas do tipo PLAN_ROW, esta coluna contém uma descrição da operação. Esta coluna contém o operador físico e pode, opcionalmente, também conter o operador lógico. Esta coluna pode também ser seguida por uma descrição determinada pelo operador físico. Para mais informações, consulte a Referência de Operadores Lógicos e Físicos do Plano de Exposição.
StmtId Número da declaração no lote atual.
NodeId ID do nó na consulta atual.
Parente ID de nó do passo pai.
PhysicalOp Algoritmo de implementação física para o nó. Apenas para filas do tipo PLAN_ROWS.
LogicalOp Operador algébrico relacional que este nó representa. Apenas para filas do tipo PLAN_ROWS.
Argumento Fornece informações suplementares sobre a operação em realização. O conteúdo desta coluna depende do operador físico.
Valores Definidos Contém uma lista separada por vírgulas de valores introduzidos por este operador. Estes valores podem ser expressões computadas que estavam presentes na consulta atual (por exemplo, na lista SELECT ou cláusula WHERE), ou valores internos introduzidos pelo processador de consultas para processar esta consulta. Estes valores definidos podem então ser referenciados noutro local desta consulta. Apenas para filas do tipo PLAN_ROWS.
EstimateRows Número estimado de linhas de saída produzidas por este operador. Apenas para filas do tipo PLAN_ROWS.
EstimateIO Custo estimado de I/O* para este operador. Apenas para filas do tipo PLAN_ROWS.
EstimateCPU Custo estimado da CPU* para este operador. Apenas para filas do tipo PLAN_ROWS.
AvgRowSize Estima o tamanho médio da linha (em bytes) da linha que está a passar por este operador.
TotalSubtreeCost Custo estimado (cumulativo) desta operação e de todas as operações filhas.
OutputList Contém uma lista separada por vírgulas de colunas projetadas pela operação atual.
Warnings Contém uma lista separada por vírgulas de mensagens de aviso relacionadas com a operação atual. As mensagens de aviso podem incluir a cadeia "NO STATS:()" com uma lista de colunas. Esta mensagem de aviso significa que o otimizador de consultas tentou tomar uma decisão com base nas estatísticas desta coluna, mas nenhuma estava disponível. Consequentemente, o otimizador de consultas teve de fazer um palpite, o que pode ter resultado na seleção de um plano de consulta ineficiente. Para mais informações sobre a criação ou atualização de estatísticas de colunas (que ajudam o otimizador de consultas a escolher um plano de consulta mais eficiente), consulte ATUALIZAR ESTATÍSTICAS. Esta coluna pode opcionalmente incluir a cadeia "MISSING JOIN PREDICATE", o que significa que está a ocorrer uma join (envolvendo tabelas) sem um predicado de join. Deixar cair acidentalmente um predicado de junção pode resultar numa consulta que demora muito mais tempo a executar do que o esperado e retorna um conjunto de resultados enorme. Se este aviso estiver presente, verifique se a ausência de um predicado de junção é intencional.
Type Tipo de nó. Para o nó pai de cada consulta, este é o tipo de Transact-SQL instrução (por exemplo, SELECT, INSERT, EXECUTE, entre outros). Para subnós que representam planos de execução, o tipo é PLAN_ROW.
Paralelo 0 = O operador não está a correr em paralelo.

1 = O operador está a correr em paralelo.
EstimativasExecuções Número estimado de vezes que este operador será executado durante a execução da consulta atual.

*As unidades de custo baseiam-se numa medição interna do tempo, não no relógio de parede. São usados para determinar o custo relativo de um plano em comparação com outros planos.

Permissions

Para usar o SET SHOWPLAN_ALL, deve ter permissões suficientes para executar as instruções sobre as quais o SET SHOWPLAN_ALL é executado, e deve ter permissão SHOWPLAN para todas as bases de dados que contenham objetos referenciados.

Para as instruções SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure e EXEC user_defined_function , para produzir um Showplan, o utilizador deve:

  • Tenha as permissões apropriadas para executar as instruções Transact-SQL.

  • Tenha permissão SHOWPLAN em todos os bancos de dados que contenham objetos referenciados pelas instruções Transact-SQL, como tabelas, exibições e assim por diante.

Para todas as outras instruções, como DDL, USE database_name, SET, DECLARE, SQL dinâmico, entre outras, são necessárias apenas as permissões apropriadas para executar as instruções Transact-SQL.

Examples

As duas instruções que se seguem utilizam as definições SET SHOWPLAN_ALL para mostrar a forma como o SQL Server analisa e otimiza o uso de índices nas consultas.

A primeira consulta utiliza o operador de comparação Equals (=) na cláusula ONDE numa coluna indexada. Isto resulta no valor de Pesquisa de Índice Agrupado na coluna LogicalOp e no nome do índice na coluna Argumento .

A segunda consulta usa o operador LIKE na cláusula WHERE. Isto obriga o SQL Server a usar uma varridura de índice clusterizada e encontrar os dados que satisfazem a condição da cláusula WHERE. Isto resulta no valor Clustered Index Scan na coluna LogicalOp com o nome do índice na coluna Argumento , e no valor Filter na coluna LogicalOp com a condição da cláusula WHERE na coluna Argumento .

Os valores nas colunas EstimateRows e TotalSubtreeCost são menores para a primeira consulta indexada, indicando que esta é processada muito mais rapidamente e consome menos recursos do que a consulta não indexada.

USE AdventureWorks2022;  
GO  
SET SHOWPLAN_ALL ON;  
GO  
-- First query.  
SELECT BusinessEntityID   
FROM HumanResources.Employee  
WHERE NationalIDNumber = '509647174';  
GO  
-- Second query.  
SELECT BusinessEntityID, EmergencyContactID   
FROM HumanResources.Employee  
WHERE EmergencyContactID LIKE '1%';  
GO  
SET SHOWPLAN_ALL OFF;  
GO  

Ver também

Instruções SET (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)
Definir SHOWPLAN_XML (Transact-SQL)