Compartir vía


sys.dm_exec_query_statistics_xml (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Base de datos de Azure SQLAzure 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

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 es anulable.
request_id int Id. de la solicitud. No admite un valor NULL valores NULL.
sql_handle varbinary(64) Token que identifica de forma única el lote o el procedimiento almacenado del que forma parte la consulta. Que admite un valor NULL.
plan_handle varbinary(64) Token que identifica de forma única un plan de ejecución de consultas para un lote que se está ejecutando actualmente. Que admite un valor NULL.
query_plan xml Contiene la representación del plan de presentación en tiempo de ejecución de la consulta que se especifica con plan_handle estadísticas parciales. El Showplan 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. Que admite un valor NULL.

Limitaciones

Debido a una posible violación de acceso aleatorio (AV) al ejecutarse un procedimiento almacenado de supervisión con la sys.dm_exec_query_statistics_xml DMV, se eliminó el valor ParameterRuntimeValue del atributo <ParameterList> Showplan XML 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. Puede volver a habilitar este valor en SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 y versiones posteriores mediante la marca de seguimiento 2446. Esta marca de seguimiento permite la recopilación del valor del parámetro en tiempo de ejecución a costa de introducir una sobrecarga adicional.

Precaución

La marca de seguimiento 2446 no está pensada para habilitarse continuamente en un entorno de producción, pero solo con fines de solución de problemas limitados por tiempo. El uso de esta marca de seguimiento genera una carga adicional de CPU y memoria que puede ser significativa, debido a la creación de un fragmento XML de Showplan con información de los parámetros en tiempo de ejecución, independientemente de si se invoca o no a la sys.dm_exec_query_statistics_xml DMV.

En SQL Server 2022 (16.x), Azure SQL Database y Azure SQL Managed Instance, puede lograr la misma funcionalidad en el nivel de base de datos usando la opción FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION en ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Comentarios

Esta función del sistema está disponible a partir de SQL Server 2016 (13.x) con Service Pack 1. Para obtener más información, 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 query_plan columna 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 query_plan columna 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 , sys.dm_exec_query_statistics_xml no se pueden devolver planes de consulta que cumplan o superen los 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 query_plan columna devuelve NULL.

Permisos

Requiere VIEW SERVER STATE permiso en el servidor, en SQL Server 2019 (15.x) y versiones anteriores.

Requiere VIEW SERVER PERFORMANCE STATE permiso en el servidor, en SQL Server 2022 (16.x) y versiones posteriores.

Requiere el permiso VIEW DATABASE STATE en la base de datos, en las versiones Premium de la base de datos SQL.

Requiere una cuenta de administrador del servidor o de administrador de Microsoft Entra en los niveles Estándar y Básico de SQL Database.

Ejemplos

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

En el ejemplo siguiente se consulta sys.dm_exec_requests para buscar la consulta interesante y copiar su session_id de 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 sys.dm_exec_query_statistics_xmldel sistema. Ejecute esta consulta en una sesión diferente a la sesión en la que se ejecuta la consulta.

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

O bien, combinado para todas las solicitudes en ejecución. Ejecute esta consulta en una sesión diferente a la sesión en la que se ejecuta la consulta.

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