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_handle la 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)