sys.dm_exec_query_statistics_xml (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed Instance

Devuelve el plan de ejecución de consultas para las solicitudes en curso. Use esta DMV para recuperar XML del plan de presentación con estadísticas transitorias.

Sintaxis

sys.dm_exec_query_statistics_xml(session_id)  

Argumentos

session_id
Es el identificador de sesión que ejecuta el lote que se va a buscar. session_id es smallint. session_id puede obtenerse a partir de los siguientes objetos de administración dinámica:

Tabla devuelta

Nombre de la columna Tipo de datos Descripción
session_id smallint Id. de la sesión. No acepta valores NULL.
request_id int Id. de la solicitud. No acepta valores NULL.
sql_handle varbinary(64) Es un token que identifica de forma única el lote o el procedimiento almacenado del que forma parte la consulta. Acepta valores NULL.
plan_handle varbinary(64) Es un token que identifica de forma exclusiva un plan de ejecución de consulta para un lote que se está ejecutando actualmente. Acepta valores NULL.
query_plan xml Contiene la representación del plan de presentación en tiempo de ejecución del plan de ejecución de consultas especificado con plan_handle que contiene estadísticas parciales. El plan de presentación está en formato XML. Se genera un plan para cada lote que contiene, por ejemplo, instrucciones Transact-SQL "ad hoc", llamadas a procedimientos almacenados y llamadas a funciones definidas por el usuario. Acepta valores NULL.

Comentarios

Importante

Propietario de una posible infracción de acceso aleatorio (AV) mientras se ejecuta un procedimiento almacenado de supervisión con la DMV sys.dm_exec_query_statistics_xml, el valor ParameterRuntimeValue de <ParameterList> del atributo XML del plan de presentación se quitó en SQL Server 2017 (14.x) CU 26 y SQL Server 2019 (15.x) CU 12. Este valor podría ser útil al solucionar problemas de procedimientos almacenados de larga duración.

A partir de SQL Server 2017 (14.x) CU 31 y SQL Server 2019 (15.x) CU 19, la colección del atributo XML <ParameterList> del plan de presentación con el valor ParameterRuntimeValue se ha vuelto a habilitar con la inclusión de la marca de seguimiento 2446. Esta marca de seguimiento habilita la recopilación del valor del parámetro en tiempo de ejecución a costa de introducir una sobrecarga adicional.

Advertencia

La marca de seguimiento 2446 no está pensada para habilitarse de manera continua en un entorno de producción, sino solo para fines de solución de problemas limitados por tiempo. El uso de esta marca de seguimiento introducirá una sobrecarga adicional y posiblemente significativa de CPU y memoria, ya que crearemos un fragmento XML del plan de presentación con información de parámetros en tiempo de ejecución, tanto si se llama a la sys.dm_exec_query_statistics_xml DMV como si no.

Nota:

A partir de SQL Server 2022 (16.x), Azure SQL Database y Azure SQL Managed Instance, para realizar esta acción en el nivel de base de datos, vea la opción FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION en ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Esta función del sistema solo está disponible a partir de SQL Server 2016 (13.x) SP1. Consulte KB 3190871

Esta función del sistema funciona en la infraestructura estándar y ligera de generación de perfiles de estadísticas de ejecución de consultas. Para obtener más información, vea Infraestructura de generación de perfiles de consultas.

En las condiciones siguientes, no se devuelve ningún resultado del plan de presentación en la columna query_plan de la tabla devuelta para sys.dm_exec_query_statistics_xml:

  • Si el plan de consulta que corresponde al session_id especificado ya no se está ejecutando, la columna query_plan de la tabla devuelta es NULL. Por ejemplo, esta condición puede producirse si hay un retraso de tiempo entre el momento en que se capturó el identificador del plan y cuándo se usó con sys.dm_exec_query_statistics_xml.

Debido a una limitación en el número de niveles anidados permitidos en el tipo de datos xml significa que sys.dm_exec_query_statistics_xml no puede devolver planes de consulta que cumplan o superen 128 niveles de elementos anidados. En las versiones anteriores de SQL Server, esta condición impedía la devolución del plan de consulta y generaba el error 6335. En SQL Server 2005 (9.x) Service Pack 2 y versiones posteriores, la columna query_plan devuelve NULL.

Permisos

En SQL Server, se requiere el permiso VIEW SERVER STATE en el servidor.
En los niveles Premium para SQL Database, se requiere el permiso VIEW DATABASE STATE en la base de datos. En los niveles Estándar y Básico de SQL Database, se necesita el administrador del servidor o una cuenta de administrador de Microsoft Entra.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VER ESTADO DE RENDIMIENTO DEL SERVIDOR en el servidor.

Ejemplos

A Examinar el plan de consulta activa y las estadísticas de ejecución de un lote en ejecución

En el siguiente ejemplo se consulta sys.dm_exec_requests para buscar la consulta de interés y copiar su session_id desde la salida.

SELECT * FROM sys.dm_exec_requests;  
GO  

A continuación, para obtener el plan de consulta activa y las estadísticas de ejecución, use la función copiada session_id con la función del 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  

O bien, combinado para todas las solicitudes en ejecución.

--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

Consulte también

Marcas de seguimiento
Funciones y vistas de administración dinámica (Transact-SQL)
Vistas de administración dinámica relacionadas con la base de datos (Transact-SQL)