Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores
Base de datos de Azure SQL
Azure 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ó consys.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_xml
del 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