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
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Devolve o Showplan em formato XML para o lote especificado pelo handle do plano. O plano especificado pelo handle do plano pode estar em cache ou estar em execução atualmente.
O esquema XML do Showplan é publicado e está disponível neste site da Microsoft. Também está disponível no diretório onde o SQL Server está instalado.
Transact-SQL convenções de sintaxe
Sintaxe
sys.dm_exec_query_plan(plan_handle)
Arguments
plan_handle
É um token que identifica de forma única um plano de execução de consulta para um lote que foi executado e cujo plano reside na cache do plano, ou que está atualmente a ser executado.
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 a aplicação de ordens pode ser chamado orderproc; 1, orderproc; 2, e assim sucessivamente. Para lotes ad hoc e preparados, esta coluna é nula. A coluna é anulável. |
| encriptado | 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 representação Showplan em tempo de compilação do plano de execução da consulta especificada 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
Sob as seguintes condições, nenhuma saída do Showplan é devolvida na coluna query_plan da tabela devolvida para sys.dm_exec_query_plan:
Se o plano de consulta especificado usando plan_handle foi expulso da cache do plano, a coluna query_plan da tabela devolvida é nula. Por exemplo, esta condição pode ocorrer se houver um atraso temporal entre o momento em que a alavanca do plano foi capturada e a sua utilização com sys.dm_exec_query_plan.
Algumas instruções Transact-SQL não são armazenadas em cache, como instruções de operação em massa ou instruções que contêm literais de cadeia com mais de 8 KB. Os Showplans XML para tais instruções não podem ser recuperados usando sys.dm_exec_query_plan a menos que o lote esteja atualmente a ser executado, pois não existem na cache.
Se um batch Transact-SQL ou procedimento armazenado contiver uma chamada a uma função definida pelo utilizador ou a SQL dinâmico, por exemplo usando EXEC (string), o Showplan XML compilado para a função definida pelo utilizador não é incluído na tabela devolvida por sys.dm_exec_query_plan para o batch ou procedimento armazenado. Em vez disso, deve fazer uma chamada separada para sys.dm_exec_query_plan para o handle do plano que corresponde à função definida pelo utilizador.
Quando uma consulta ad hoc utiliza parametrização simples ou forçada, a coluna query_plan contém apenas o texto da instrução e não o plano real da consulta. Para devolver o plano da consulta, chame sys.dm_exec_query_plan para o handle do plano da consulta parametrizada preparada. Pode determinar se a consulta foi parametrizada referenciando a coluna sql da vista sys.syscacheobjects ou a coluna de texto da vista de gestão dinâmica sys.dm_exec_sql_text .
Observação
Devido a uma limitação no número de níveis aninhados permitidos no tipo de dados xml , sys.dm_exec_query_plan não pode devolver planos de consulta que cumpram 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 coluna query_plan devolve NULL.
Pode usar a função de gestão dinâmica sys.dm_exec_text_query_plan (Transact-SQL) para devolver a saída do plano de consulta em formato de texto.
Permissions
Para executar sys.dm_exec_query_plan, um utilizador deve ser membro do papel fixo de servidor de sysadmin ou ter a VIEW SERVER STATE permissão no servidor.
Permissões para SQL Server 2022 e posterior
Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Examples
Os exemplos seguintes mostram como usar a vista de gestão dinâmica sys.dm_exec_query_plan .
Para visualizar os Planos de Exposição XML, execute as seguintes consultas no Editor de Consultas do SQL Server Management Studio e depois clique em ShowPlanXML na coluna query_plan da tabela devolvida por sys.dm_exec_query_plan. O Plano de Apresentação XML é exibido no painel de resumo do Management Studio. Para guardar o XML Showplan num ficheiro, clique com o botão direito em ShowPlanXML na coluna query_plan, clique em Guardar Resultados Como, nomeie o ficheiro no formato < file_name.sqlplan>; por exemplo, MyXMLShowplan.sqlplan.
A. Recuperar o plano de consulta em cache para uma consulta de Transact-SQL ou batch de execução lenta
Planos de consulta para vários tipos de lotes Transact-SQL, como lotes ad hoc, procedimentos armazenados e funções definidas pelo utilizador, são armazenados numa área de memória chamada cache plano. Cada plano de consulta em cache é identificado por um identificador único chamado handle de plano. Pode especificar este handle de plano com a vista de gestão dinâmica sys.dm_exec_query_plan para recuperar o plano de execução para uma determinada consulta Transact-SQL ou lote.
Se uma consulta Transact-SQL ou batch correr durante muito tempo numa ligação específica ao SQL Server, recupere o plano de execução dessa consulta ou lote para descobrir o que está a causar o atraso. O exemplo seguinte mostra como recuperar o XML Showplan para uma consulta ou batch de execução lenta.
Observação
Para executar este exemplo, substitua os valores de session_id e plan_handle por valores específicos do seu servidor.
Primeiro, recupere o ID da sessão (SPID) do processo que está a executar a consulta ou lote usando o sp_who procedimento armazenado:
USE master;
GO
exec sp_who;
GO
O conjunto de resultados que é devolvido por sp_who indica que o ID da sessão é 54. Pode usar o ID da sessão com a sys.dm_exec_requests vista de gestão dinâmica para recuperar o handle do plano usando a seguinte consulta:
USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO
A tabela que é devolvida por sys.dm_exec_requests indica que o handle do plano para a consulta ou lote de execução lenta é 0x06000100A27E7C1FA821B10600, que pode especificar como o argumento plan_handle para sys.dm_exec_query_plan recuperar o plano de execução em formato XML da seguinte forma. O plano de execução em formato XML para a consulta ou lote de execução lenta está contido na coluna query_plan da tabela devolvida por sys.dm_exec_query_plan.
USE master;
GO
SELECT *
FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);
GO
B. Recuperar todos os planos de consulta do cache do plano
Para obter um instantâneo de todos os planos de consulta que residem na cache de planos, recupere os handles de planos de todos os planos de consulta na cache consultando a sys.dm_exec_cached_plans vista de gestão dinâmica. As maçanetas do plano são armazenadas na plan_handle coluna de sys.dm_exec_cached_plans. Depois, use o operador CROSS APPLY para passar os handles do plano da sys.dm_exec_query_plan seguinte forma. A saída XML do Showplan para cada plano atualmente na cache do plano está na query_plan coluna da tabela que é retornada.
USE master;
GO
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO
C. Recuperar todos os planos de consulta para os quais o servidor recolheu estatísticas de consulta da cache do plano
Para obter um instantâneo de todos os planos de consulta para os quais o servidor recolheu estatísticas que atualmente residem na cache do plano, recupere os handles de planos desses planos na cache consultando a sys.dm_exec_query_stats vista de gestão dinâmica. As maçanetas do plano são armazenadas na plan_handle coluna de sys.dm_exec_query_stats. Depois, use o operador CROSS APPLY para passar os handles do plano da sys.dm_exec_query_plan seguinte forma. A saída XML do Showplan para cada plano para o qual o servidor recolheu estatísticas atualmente na cache do plano está na query_plan coluna da tabela que é devolvida.
USE master;
GO
SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);
GO
D. Obter informações sobre as cinco principais consultas pelo tempo médio de CPU
O exemplo seguinte devolve os planos e o tempo médio de CPU para as cinco principais consultas.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
plan_handle, query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)
ORDER BY total_worker_time/execution_count DESC;
GO
Ver também
Visualizações e funções de gerenciamento dinâmico (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sp_who (Transact-SQL)
Referência dos Operadores Lógicos e Físicos do Showplan
sys.dm_exec_text_query_plan (Transact-SQL)