Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2019 (15.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
SQL 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:
- 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 | 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_handlefoi 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