Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2019 (15.x) e versões posteriores
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Banco de dados SQL no 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 )
Argumentos
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 de planos ou que está sendo executado no momento. plan_handle é varbinary(64).
O plan_handle pode ser obtido dos seguintes objetos de gerenciamento dinâmico:
- sys.dm_exec_cached_plans
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_procedure_stats
- sys.dm_exec_trigger_stats
Tabela retornada
| Nome da Coluna | Tipo de dados | Descrição |
|---|---|---|
dbid |
smallint | A ID do banco de dados de contexto em vigor quando a instrução Transact-SQL correspondente a esse plano foi compilada. Para instruções SQL preparadas e ad hoc, a ID do banco de dados no qual as instruções foram compiladas. A coluna é anulável. |
objectid |
int | A identificação do objeto (por exemplo, procedimento armazenado ou função definida pelo usuário) para este plano de consulta. Para lotes assistemáticos e preparados, essa coluna é nula. A coluna é anulável. |
number |
smallint | Inteiro de procedimento armazenado numerado. Por exemplo, um grupo de procedimentos para o orders aplicativo pode ser nomeado orderproc;1e orderproc;2assim por diante. Para lotes assistemáticos e preparados, essa 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 conhecida em tempo de execução do plano de execução da 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 ad hoc Transact-SQL, chamadas de procedimentos armazenados e chamadas de função definidas pelo usuário. A coluna é anulável. |
Observações
Esse é um recurso opcional. 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.
Essa função do sistema funciona sob a infraestrutura de perfil de estatísticas de execução de consulta leve. Para obter mais informações, confira Infraestrutura de Criação de Perfil de Consulta.
A saída de Showplan por sys.dm_exec_query_plan_stats contém as seguintes informações:
Todas as informações de 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 de execução e o tempo de execução da CPU da consulta total, avisos de derramamento, DOP real, a memória máxima usada e a memória concedida
Sob as seguintes condições, uma saída de Showplan equivalente a um plano de execução real é retornada na coluna query_plan da tabela retornada para sys.dm_exec_query_plan_stats:
O plano pode ser encontrado em sys.dm_exec_cached_plans.
e
A consulta que está sendo executada é complexa ou consome muitos recursos.
Sob as seguintes condições, um resultado do Showplan simplificado1 é retornado na coluna query_plan da tabela retornada para sys.dm_exec_query_plan_stats:
O plano pode ser encontrado em sys.dm_exec_cached_plans.
e
A consulta é bastante simples, geralmente classificada como parte de uma carga de trabalho OLTP.
1 Refere-se a um plano de execução que contém apenas o operador de nó raiz (SELECT).
Nas condições a seguir, nenhuma saída é retornada de sys.dm_exec_query_plan_stats:
O plano de consulta especificado pelo uso do endereço
plan_handlefoi removido do cache de planos.ou
Em primeiro lugar, o plano de consulta não era armazenável em cache. Para obter mais informações, consulte Cache e reutilização do plano de execução.
Note
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 o retorno do plano de consulta e gerava 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. Observar 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 copiar seu 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 o plan_handle copiado com a função do sistema sys.dm_exec_query_plan_stats.
SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO
B. Observar o último plano de execução de consulta real conhecido para todos os planos 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. Observar o último plano de execução de consulta real conhecido para um plano específico armazenado em cache e um 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. Examinar eventos 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