Partilhar via


sys.dm_exec_query_statistics_xml (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

Retorna o plano de execução de consulta para solicitações em voo. Use esta DMV para recuperar o XML do showplan com estatísticas transitórias.

Sintaxe

sys.dm_exec_query_statistics_xml(session_id)

Argumentos

session_id

O ID da sessão que executa o lote a ser pesquisado. session_id é smallint. session_id podem ser obtidos dos seguintes objetos de gerenciamento dinâmico:

Tabela retornada

Nome da Coluna Tipo de dados Descrição
session_id smallint ID da sessão. Não anulável.
request_id int ID do pedido. Não anulável.
sql_handle varbinary(64) Um token que identifica exclusivamente o lote ou o procedimento armazenado do qual a consulta faz parte. Poder ser nulo.
plan_handle varbinary(64) Um token que identifica exclusivamente um plano de execução de consulta para um lote que está sendo executado no momento. Poder ser nulo.
query_plan xml Contém a representação do Showplan em tempo de execução do plano de execução de consulta especificado com plan_handle contendo estatísticas parciais. 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. Poder ser nulo.

Limitações

Devido a uma possível violação de acesso aleatório (AV) durante a execução de um procedimento armazenado de monitoramento com o sys.dm_exec_query_statistics_xml DMV, o valor <ParameterList> do atributo ParameterRuntimeValue Showplan XML foi removido no SQL Server 2017 (14.x) 26 e no SQL Server 2019 (15.x) 12. Esse valor pode ser útil ao solucionar problemas de procedimentos armazenados de longa execução. Você pode reativar esse valor no SQL Server 2017 (14.x) 31, SQL Server 2019 (15.x) 19 e versões posteriores, usando o sinalizador de rastreamento 2446. Esse sinalizador de rastreamento permite a coleta do valor do parâmetro de tempo de execução ao custo da introdução de sobrecarga extra.

Atenção

O sinalizador de rastreamento 2446 não deve ser habilitado continuamente em um ambiente de produção, mas apenas para fins de solução de problemas por tempo limitado. O uso desse sinalizador de rastreamento introduz uma sobrecarga de CPU e memória extra e possivelmente significativa, pois cria um fragmento XML do Showplan com informações de parâmetros de tempo de execução, independentemente de o sys.dm_exec_query_statistics_xml DMV ser chamado ou não.

No SQL Server 2022 (16.x), no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure, você pode realizar a mesma funcionalidade no nível do banco de dados usando a FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION opção em ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Observações

Esta função do sistema está disponível a partir do SQL Server 2016 (13.x) com Service Pack 1. Para obter mais informações, consulte KB 3190871.

Esta função do sistema opera em infraestrutura de perfilagem de estatísticas de execução de consulta padrão e leve. Para obter mais informações, consulte a infraestrutura de perfilamento de consultas .

Sob as seguintes condições, nenhuma saída do Showplan é retornada na coluna query_plan da tabela resultante para sys.dm_exec_query_statistics_xml.

  • Se o plano de consulta que corresponde ao session_id especificado não estiver mais em execução, a query_plan coluna da tabela retornada será nula. Por exemplo, esta condição pode ocorrer se houver um atraso temporal entre quando o identificador de plano foi capturado e quando foi usado com sys.dm_exec_query_statistics_xml

Devido a uma limitação no número de níveis aninhados permitidos no tipo de dados xml , sys.dm_exec_query_statistics_xml 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.

Permissões

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

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

Requer a VIEW DATABASE STATE permissão na base de dados, nos níveis Premium do SQL Database.

Requer o administrador do servidor ou uma conta de administrador do Microsoft Entra nas camadas Standard e Basic do Banco de dados SQL.

Exemplos

Um. Observe o plano de consulta em tempo real e as estatísticas de execução de um lote em execução

No exemplo seguinte, consulta-se sys.dm_exec_requests para identificar a consulta interessante e copiar session_id a partir do resultado.

SELECT *
FROM sys.dm_exec_requests;
GO

Em seguida, para obter o plano de consulta ao vivo e estatísticas de execução, use a session_id copiada com a função do sistema sys.dm_exec_query_statistics_xml. Execute essa consulta em uma sessão diferente da sessão em que a consulta está sendo executada.

SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO

Ou, combinado para todas as solicitações em execução. Execute essa consulta em uma sessão diferente da sessão em que a consulta está sendo executada.

SELECT eqs.query_plan,
       er.session_id,
       er.request_id,
       er.database_id,
       er.start_time,
       er.[status],
       er.wait_type,
       er.wait_resource,
       er.last_wait_type,
       (er.cpu_time / 1000) AS cpu_time_sec,
       (er.total_elapsed_time / 1000) / 60 AS elapsed_time_minutes,
       (er.logical_reads * 8) / 1024 AS logical_reads_KB,
       er.granted_query_memory,
       er.dop,
       er.row_count,
       er.query_hash,
       er.query_plan_hash
FROM sys.dm_exec_requests AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO