Partilhar via


sys.dm_exec_query_plan_stats (Transact-SQL)

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Retorna o equivalente ao último plano de execução real conhecido para um plano de consulta previamente armazenado em cache.

Sintaxe

sys.dm_exec_query_plan_stats ( plan_handle )

Arguments

plan_handle

Um token que identifica exclusivamente um plano de execução de consulta para um lote que foi executado e seu plano reside no cache do plano ou está em execução no momento. plan_handle é varbinary(64).

O plan_handle pode ser obtido a partir dos seguintes objetos de gerenciamento dinâmico:

Tabela retornada

Nome da coluna Tipo de dados Description
dbid smallint ID do banco de dados de contexto que estava em vigor quando a instrução Transact-SQL correspondente a este plano foi compilada. Para instruções SQL ad hoc e preparadas, a ID do banco de dados onde as instruções foram compiladas.

A coluna é anulável.
objectid int ID do objeto (por exemplo, procedimento armazenado ou função definida pelo usuário) para este plano de consulta. Para lotes ad hoc e preparados, esta coluna é nula.

A coluna é anulável.
number smallint Inteiro do procedimento armazenado numerado. Por exemplo, um grupo de procedimentos para o orders aplicativo pode ser chamado orderproc;1, orderproc;2, e assim por diante. Para lotes ad hoc e preparados, esta coluna é nula.

A coluna é anulável.
encrypted bit Indica se o procedimento armazenado correspondente está criptografado.

0 = não criptografado
1 = criptografado

A coluna não é anulável.
query_plan xml Contém a última representação Showplan de tempo de execução conhecida do plano de execução de consulta real especificado com plan_handle. O Showplan está em formato XML. Um plano é gerado para cada lote que contém, por exemplo, instruções Transact-SQL ad hoc, chamadas de procedimento armazenado e chamadas de função definidas pelo usuário.

A coluna é anulável.

Observações

Este é um recurso de adesão. Para habilitar no nível do servidor, use o sinalizador de rastreamento 2451. Para habilitar no nível do banco de dados, use a LAST_QUERY_PLAN_STATS opção em ALTER DATABASE SCOPED CONFIGURATION.

Esta função do sistema funciona sob a infraestrutura de criação de perfil de estatísticas de execução de consulta leve . Para obter mais informações, consulte Infraestrutura de Perfilamento de Consultas.

A saída do Showplan por sys.dm_exec_query_plan_stats contém as seguintes informações:

  • Todas as informações em tempo de compilação encontradas no plano armazenado em cache

  • Informações de tempo de execução, como o número real de linhas por operador, o tempo total da CPU de consulta e o tempo de execução, avisos de vazamento, DOP real, a memória máxima usada e a memória concedida

Sob as seguintes condições, uma saída Showplan equivalente a um plano de execução real é retornada na query_plan coluna da tabela retornada para sys.dm_exec_query_plan_stats:

  • O plano pode ser consultado em sys.dm_exec_cached_plans.

    e ainda

  • A consulta que está sendo executada é complexa ou consome recursos.

Sob as seguintes condições, uma saída simplificadade 1 Showplan é retornada na query_plan coluna da tabela retornada para sys.dm_exec_query_plan_stats:

  • O plano pode ser consultado em sys.dm_exec_cached_plans.

    e ainda

  • A consulta é simples o suficiente, geralmente categorizada como parte de uma carga de trabalho OLTP.

1 Refere-se a um Showplan que contém apenas o operador do nó raiz (SELECT).

Sob as seguintes condições, nenhuma saída é retornada de sys.dm_exec_query_plan_stats:

  • O plano de consulta especificado usando plan_handle foi removido do cache do plano.

    ou

  • O plano de consulta não era armazenável em cache em primeiro lugar. Para obter mais informações, consulte Cache e reutilização do plano de execução.

Observação

Uma limitação no número de níveis aninhados permitidos no tipo de dados xml significa que sys.dm_exec_query_plan não é possível retornar planos de consulta que atendam ou excedam 128 níveis de elementos aninhados. Em versões anteriores do SQL Server, essa condição impedia que o plano de consulta retornasse e gera o erro 6335. No SQL Server 2005 (9.x) Service Pack 2 e versões posteriores, a query_plan coluna retorna NULL.

Permissions

O SQL Server 2019 (15.x) e versões anteriores exigem VIEW SERVER STATE permissão no servidor.

O SQL Server 2022 (16.x) e versões posteriores exigem VIEW SERVER PERFORMANCE STATE permissão no servidor.

Examples

A. Observe o último plano de execução de consulta real conhecido para um plano específico armazenado em cache

O exemplo a seguir consulta sys.dm_exec_cached_plans para encontrar o plano interessante e copiá-lo plan_handle da saída.

SELECT * FROM sys.dm_exec_cached_plans;
GO

Em seguida, para obter o último plano de execução de consulta real conhecido, use a função plan_handlecopiada sys.dm_exec_query_plan_stats com o sistema .

SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO

B. Veja o último plano de execução de consulta real conhecido para todos os planos armazenados em cache

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO

C. Observe o último plano de execução de consulta real conhecido para um plano em cache específico e texto de consulta

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO

D. Examine os eventos armazenados em cache para o gatilho

SELECT * FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype = 'Trigger';
GO