Partilhar via


sys.dm_exec_query_statistics_xml (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

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
É a ID da sessão que está executando o lote a ser pesquisado. 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 de que 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 em execução no momento. Anulável.
query_plan xml Contém a representação Showplan em tempo de execução do plano de execução da consulta que é 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.

Comentários

Importante

Devido a uma possível violação de acesso aleatório (AV) durante a execução de um procedimento armazenado de monitoramento com a DMV sys.dm_exec_query_statistics_xml, o atributo XML Showplan <ParameterList> de valor ParameterRuntimeValue foi removido no SQL Server 2017 (14.x) CU 26 e no SQL Server 2019 (15.x) CU 12. Esse valor pode ser útil na solução de problemas de procedimentos armazenados de execução prolongada.

A partir do SQL Server 2017 (14.x) CU 31 e do SQL Server 2019 (15.x) CU 19, a coleta do atributo XML Showplan <ParameterList> de valor ParameterRuntimeValue foi reabilitada com a inclusão do sinalizador de rastreamento 2446. Esse sinalizador de rastreamento permite a coleta do valor do parâmetro de tempo de execução às custas de introduzir uma sobrecarga adicional.

Aviso

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 com tempo limitado. O uso desse sinalizador de rastreamento introduzirá uma sobrecarga adicional e possivelmente significativa de CPU e memória, pois criaremos um fragmento XML do Plano de Execução com informações de parâmetro de runtime, quer a DMV do sys.dm_exec_query_statistics_xml seja chamada ou não.

Observação

A partir do SQL Server 2022 (16.x), do Banco de Dados SQL do Azure e da Instância Gerenciada de SQL do Azure, para fazer isso no nível do banco de dados, consulte a opção FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION em ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Essa função do sistema está disponível a partir do SQL Server 2016 (13.x) SP1. Consulte o artigo 3190871 da base de dados de conhecimento

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 condições a seguir, nenhuma saída de Showplan é retornada na coluna query_plan da tabela retornada para sys.dm_exec_query_statistics_xml:

  • Se o plano de consulta que corresponde a session_id especificado não estiver mais sendo executado, a coluna query_plan da tabela retornada será nula. Por exemplo, essa condição poderá ocorrer se houver um atraso entre o momento em que o identificador do 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 pode retornar planos de consulta iguais ou superiores a 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 coluna query_plan retorna NULL.

Permissões

No SQL Server, requer a permissão VIEW SERVER STATE no servidor.
Nas camadas Premium do Banco de Dados SQL, a permissão VIEW DATABASE STATE é necessária no banco de dados. Nas camadas Standard e Basic do Banco de Dados SQL, é necessária uma conta de Administrador do servidor ou uma conta de administrador do Microsoft Entra.

Permissões do SQL Server 2022 e posteriores

É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Exemplos

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

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

SELECT * FROM sys.dm_exec_requests;  
GO  

Em seguida, para obter o plano de consulta em tempo real e as estatísticas de execução, use o session_id copiado com a função do sistema sys.dm_exec_query_statistics_xml.

--Run this in a different session than the session in which your query is running.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);  
GO  

Ou combinado para todas as solicitações em andamento.

--Run this in a different session than the session in which your query is running.
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 er
	CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) eqs
WHERE er.session_id <> @@spid;
GO

Confira também

Sinalizadores de rastreamento
Exibições e funções de gerenciamento dinâmico (Transact-SQL)
Exibições de gerenciamento dinâmico relacionadas a bancos de dados (Transact-SQL)