sys.dm_exec_query_plan_stats (Transact-SQL)
SE APLICA A:
SQL Server 2019 y versiones
posteriores Azure SQL Database
Azure Synapse Analytics Parallel
Data Warehouse
Devuelve el equivalente del último plan de ejecución real conocido para un plan de consulta previamente almacenado en caché.
Sintaxis
sys.dm_exec_query_plan_stats(plan_handle)
Argumentos
plan_handle
Es un token que identifica de forma única un plan de ejecución de consultas para un lote que se ha ejecutado y su plan reside en la caché del plan o se está ejecutando actualmente. plan_handle es varbinary(64).
La plan_handle se puede obtener de los siguientes objetos de administración dinámica:
Tabla devuelta
| Nombre de columna | Tipo de datos | Descripción |
|---|---|---|
| Dbid | smallint | Identificador de la base de datos de contexto que estaba activa al compilarse la instrucción Transact-SQL correspondiente a este plan. En el caso de instrucciones SQL ad hoc y preparadas, identificador de la base de datos en que se compilaron las instrucciones. Esta columna acepta valores NULL. |
| objectid | int | Identificador del objeto (por ejemplo, procedimiento almacenado o función definida por el usuario) de este plan de consulta. Para lotes "ad hoc" y preparados, esta columna es null. Esta columna acepta valores NULL. |
| número | smallint | Entero de procedimiento almacenado numerado. Por ejemplo, un grupo de procedimientos de la aplicación orders puede llamarse orderproc;1, orderproc;2, etc. Para lotes "ad hoc" y preparados, esta columna es null. Esta columna acepta valores NULL. |
| Encriptados | bit | Indica si el procedimiento almacenado correspondiente está cifrado. 0 = no cifrado 1 = cifrado La columna no acepta valores NULL. |
| query_plan | xml | Contiene la última representación conocida del plan de presentación en tiempo de ejecución del plan de ejecución de consultas real que se especifica con plan_handle. 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. Esta columna acepta valores NULL. |
Observaciones
Esta característica es opcional. Para habilitar en el nivel de servidor, use la marca de seguimiento 2451. Para habilitar en el nivel de base de datos, use la LAST_QUERY_PLAN_STATS en ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).
Esta función del sistema funciona en la infraestructura de generación de perfiles de estadísticas de ejecución de consultas ligeras. Para obtener más información, vea Infraestructura de generación de perfiles de consultas.
La salida del plan de sys.dm_exec_query_plan_stats presentación de contiene la siguiente información:
- Toda la información en tiempo de compilación que se encuentra en el plan almacenado en caché
- Información en tiempo de ejecución, como el número real de filas por operador, el tiempo total de cpu y ejecución de la consulta, las advertencias de desbordamiento, el DOP real, la memoria máxima usada y la memoria concedida
En las condiciones siguientes, se devuelve una salida de Plan de presentación equivalente a un plan de ejecución real en la columna query_plan de la tabla devuelta para sys.dm_exec_query_plan_stats :
- El plan se puede encontrar en sys.dm_exec_cached_plans.
AND - La consulta que se ejecuta es compleja o consume recursos.
En las condiciones siguientes, se devuelve una salida simplificada de Plan de presentación en la query_plan de la tabla devuelta para sys.dm_exec_query_plan_stats :
- El plan se puede encontrar en sys.dm_exec_cached_plans.
AND - La consulta es lo suficientemente sencilla, normalmente clasificada como parte de una carga de trabajo oltp.
1 Hace referencia a un plan de presentación que solo contiene el operador de nodo raíz (SELECT).
En las condiciones siguientes, no se devuelve ninguna salida de sys.dm_exec_query_plan_stats :
- El plan de consulta especificado mediante se ha expulsado de
plan_handlela caché del plan.
OR - El plan de consulta no se podía almacenar en caché en primer lugar. Para obtener más información, vea Almacenamiento en caché del plan de ejecución y Reutilización de .
Nota
Debido a una limitación en el número de niveles anidados permitidos en el tipo de datos xml, no puede devolver planes de consulta que cumplan o superen sys.dm_exec_query_plan los 128 niveles de elementos anidados. En versiones anteriores de , esta condición impedía que el plan de consulta devolvía y SQL Server generaba el error 6335. En SQL Server 2005 (9.x) Service Pack 2 y versiones posteriores, la query_plan columna devuelve NULL.
Permisos
Requiere el permiso VIEW SERVER STATE en el servidor.
Ejemplos
A. Consulta del último plan de ejecución de consultas real conocido para un plan almacenado en caché específico
En el ejemplo siguiente se sys.dm_exec_cached_plans para buscar el plan interesante y copiarlo plan_handle de la salida.
SELECT * FROM sys.dm_exec_cached_plans;
GO
A continuación, para obtener el último plan de ejecución de consultas real conocido, use el objeto copiado con la plan_handle función del sys.dm_exec_query_plan_stats.
SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO
B. Consulta del último plan de ejecución de consultas real conocido para todos los planes almacenados en caché
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO
C. Consulta del último plan de ejecución de consultas real conocido para un plan almacenado en caché específico y texto de consulta
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO
D. Consulta de eventos almacenados en caché para el desencadenador
SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype ='Trigger';
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 ejecución (Transact-SQL)