Compartilhar via


sys.dm_exec_query_statistics_xml (Transact-SQL)

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

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

Sintaxe

sys.dm_exec_query_statistics_xml(session_id)

Argumentos

session_id

O ID da sessão executando o lote a ser consultado. session_id é smallint. session_id pode ser obtido nos 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 permite valor nulo.
request_id int ID da solicitação. Não permite valor nulo.
sql_handle varbinary(64) Um token que identifica exclusivamente o lote ou o procedimento armazenado do qual a consulta faz parte. Anulável.
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. Anulável.
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 ad hoc Transact-SQL, chamadas de procedimentos armazenados e chamadas de função definidas pelo usuário. Anulável.

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 a 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 SQL Server 2019 (15.x) 12. Esse valor pode ser útil na solução de problemas de procedimentos armazenados de execução prolongada. Você pode reabilitar essa configuração no SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 e versões posteriores, usando o sinalizador de rastreamento 2446. Esse flag de rastreamento permite a coleta do valor do parâmetro de tempo de execução, mas introduz uma sobrecarga adicional.

Cuidado

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 limitados por tempo. O uso desse sinalizador de rastreamento apresenta uma sobrecarga extra e possivelmente significativa de CPU e memória, pois cria um fragmento de XML do Showplan com informações de parâmetros de execução, independentemente de a sys.dm_exec_query_statistics_xml DMV ser chamada ou não.

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

Comentários

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

Essa função do sistema funciona com as infraestruturas de criação de perfil de estatísticas de execução de consultas padrão e leve. Para obter mais informações, confira Infraestrutura de Criação de Perfil de Consulta.

Nas seguintes condições, nenhuma saída de plano de execução é retornada na query_plan coluna da tabela retornada 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, essa condição poderá ocorrer se houver um atraso de tempo entre quando o identificador do plano foi capturado e quando ele 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 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.

Permissões

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

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

Requer a permissão VIEW DATABASE STATE no banco de dados, nas camadas Premium do SQL Database.

Requer o administrador do servidor ou uma conta de administrador do Microsoft Entra nas camadas Padrão e Básicas do Banco de Dados SQL.

Exemplos

R. Examinar o plano de consulta em tempo real e as estatísticas de execução para um lote em execução

O exemplo a seguir consulta sys.dm_exec_requests para localizar a consulta interessante e copiar o session_id da saída.

SELECT *
FROM sys.dm_exec_requests;
GO

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

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

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

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