sys.query_store_plan (Transact-SQL)
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
Contiene información sobre cada plan de ejecución asociado a una consulta.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
plan_id |
bigint | Clave principal. |
query_id |
bigint | Clave externa. Se une a sys.query_store_query (Transact-SQL). |
plan_group_id |
bigint | Identificador del grupo de planes. Las consultas de cursor suelen requerir varios planes (rellenar y capturar). Los planes de rellenar y capturar que se compilan juntos están en el mismo grupo.0 significa que el plan no está en un grupo. |
engine_version |
nvarchar(32) | Versión del motor que se usa para compilar el plan en <major>.<minor>.<build>.<revision> formato. |
compatibility_level |
smallint | Nivel de compatibilidad de la base de datos a la que se hace referencia en la consulta. |
query_plan_hash |
binary(8) | Hash MD5 del plan individual. |
query_plan |
nvarchar(max) | XML del plan de presentación para el plan de consulta. |
is_online_index_plan |
bit | El plan se usó durante una generación de índice en línea. Nota: Azure Synapse Analytics siempre devuelve 0 . |
is_trivial_plan |
bit | El plan es un plan trivial (salida en la fase 0 del optimizador de consultas). Nota: Azure Synapse Analytics siempre devuelve 0 . |
is_parallel_plan |
bit | El plan es paralelo. Nota: Azure Synapse Analytics siempre devuelve 1 . |
is_forced_plan |
bit | El plan se marca como forzado cuando el usuario ejecuta el procedimiento sys.sp_query_store_force_plan almacenado . El mecanismo de fuerza no garantiza que este plan exacto se usará para la consulta a la que hace query_id referencia . Al forzar el plan, la consulta se vuelve a compilar y normalmente genera exactamente lo mismo o un plan similar al plan al que hace plan_id referencia . Si la fuerza del plan no se realiza correctamente, force_failure_count se incrementa y last_force_failure_reason se rellena con el motivo del error.Nota: Azure Synapse Analytics siempre devuelve 0 . |
is_natively_compiled |
bit | El plan incluye procedimientos optimizados para memoria compilados de forma nativa. (0 = FALSE , 1 = TRUE ).Nota: Azure Synapse Analytics siempre devuelve 0 . |
force_failure_count |
bigint | Número de veces que se ha producido un error al forzar este plan. Solo se puede incrementar cuando se vuelve a compilar la consulta (no en cada ejecución). Restablece a 0 cada vez is_plan_forced que se cambia de FALSE a TRUE .Nota: Azure Synapse Analytics siempre devuelve 0 . |
last_force_failure_reason |
int | Motivo por el que se produjo un error al forzar el plan. 0: no hay ningún error; de lo contrario, el número de error del error que provocó el error del forzado. 3617: COMPILATION_ABORTED_BY_CLIENT 8637: ONLINE_INDEX_BUILD 8675: OPTIMIZATION_REPLAY_FAILED 8683: INVALID_STARJOIN 8684: TIME_OUT 8689: NO_DB 8690: HINT_CONFLICT 8691: SETOPT_CONFLICT 8694: DQ_NO_FORCING_SUPPORTED 8698: NO_PLAN 8712: NO_INDEX 8713: VIEW_COMPILE_FAILED <otro valor>: GENERAL_FAILURE Nota: Azure Synapse Analytics siempre devuelve 0 . |
last_force_failure_reason_desc |
nvarchar(128) | Descripción textual de last_force_failure_reason .COMPILATION_ABORTED_BY_CLIENT : compilación de consultas anuladas por el cliente antes de completarlaONLINE_INDEX_BUILD : la consulta intenta modificar los datos mientras la tabla de destino tiene un índice que se está compilando en línea.OPTIMIZATION_REPLAY_FAILED : no se pudo ejecutar el script de reproducción de optimización.INVALID_STARJOIN : el plan contiene una especificación StarJoin no válida.TIME_OUT : el optimizador superó el número de operaciones permitidas al buscar el plan especificado por el plan forzado.NO_DB : no existe una base de datos especificada en el plan.HINT_CONFLICT : no se puede compilar la consulta porque el plan entra en conflicto con una sugerencia de consulta.DQ_NO_FORCING_SUPPORTED : no se puede ejecutar la consulta porque el plan entra en conflicto con el uso de operaciones de consulta distribuida o de texto completo.NO_PLAN : el procesador de consultas no pudo generar el plan de consulta, ya que no se pudo comprobar el plan forzado como válido para la consulta.NO_INDEX : el índice especificado en el plan ya no existe.VIEW_COMPILE_FAILED : no se pudo forzar el plan de consulta debido a un problema en una vista indizada a la que se hace referencia en el plan.GENERAL_FAILURE : error de fuerza general (no cubierto por otras razones)Nota: Azure Synapse Analytics siempre devuelve NONE . |
count_compiles |
bigint | Estadísticas de compilación de planes. |
initial_compile_start_time |
datetimeoffset | Estadísticas de compilación de planes. |
last_compile_start_time |
datetimeoffset | Estadísticas de compilación de planes. |
last_execution_time |
datetimeoffset | La última hora de ejecución se refiere a la última hora de finalización de la consulta/plan. |
avg_compile_duration |
float | Planee estadísticas de compilación, en microsegundos. Divida en 1000 000 para obtener segundos. |
last_compile_duration |
bigint | Planee estadísticas de compilación, en microsegundos. Divida en 1000 000 para obtener segundos. |
plan_forcing_type |
int | Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Tipo de forzado de planes. 0: NONE 1: MANUAL 2: AUTO |
plan_forcing_type_desc |
nvarchar(60) | Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Descripción del texto de plan_forcing_type .NONE : sin forzar ningún planMANUAL : plan forzado por el usuarioAUTO : plan forzado por ajuste automático. |
has_compile_replay_script |
bit | Se aplica a: SQL Server 2022 (16.x) y versiones posteriores. Indica si el plan tiene asociado un script de reproducción de optimización: 0 = Ningún script de reproducción de optimización (ninguno o incluso no válido). 1 = Script de reproducción de optimización registrado. No es aplicable a Azure Synapse Analytics. |
is_optimized_plan_forcing_disabled |
bit | Se aplica a: SQL Server 2022 (16.x) y versiones posteriores. Indica si el forzado de plan optimizado se deshabilitó para el plan: 0 = deshabilitada 1 = no deshabilitado. No es aplicable a Azure Synapse Analytics. |
plan_type |
int | Se aplica a: SQL Server 2022 (16.x) y versiones posteriores. Tipo de plan. 0: Plan compilado 1: Plan de distribuidor 2: Plan variant de consulta No es aplicable a Azure Synapse Analytics. |
plan_type_desc |
nvarchar(120) | Se aplica a: SQL Server 2022 (16.x) y versiones posteriores. Descripción del texto del tipo de plan. Plan compilado: indica que el plan es un plan optimizado para no parámetros Plan de distribuidor: indica que el plan es un plan optimizado para parámetros. Plan de variante de consulta: indica que el plan es un plan de consulta optimizado para parámetros. No es aplicable a Azure Synapse Analytics. |
Comentarios
Se puede forzar más de un plan cuando se habilita Almacén de consultas para réplicas secundarias.
En Azure Synapse Analytics, el uso de columnas has_compile_replay_script
, is_optimized_plan_forcing_disabled
, plan_type
, plan_type_desc
produce un Invalid Column Name
error, ya que no se admiten. Consulte el ejemplo B para ver un ejemplo de cómo usar sys.query_store_plan
en Azure Synapse Analytics.
Limitaciones de forzar un plan
El Almacén de consultas dispone de un mecanismo para obligar al optimizador de consultas a usar un determinado plan de ejecución. Pero existen algunas limitaciones que pueden evitar la aplicación de un plan.
En primer lugar, si el plan contiene las siguientes construcciones:
- Insertar instrucción bulk
- Referencia a una tabla externa
- Consulta distribuida u operaciones de texto completo
- Uso de consultas elásticas
- Cursores dinámicos o de conjunto de claves
- Especificación de combinación en estrella no válida
Nota:
Azure SQL Database y SQL Server 2019 y versiones posteriores admiten el plan de soporte técnico para cursores estáticos y de avance rápido.
En segundo lugar, si los objetos en los que se basa el plan ya no están disponibles:
- Base de datos (si la base de datos, donde se originó el plan, ya no existe)
- Índice (ya no existe o está deshabilitado)
Por último, problemas con el propio plan:
- No válido para la consulta
- El optimizador de consultas ha superado el número de operaciones permitidas
- XML de plan formado incorrectamente
Permisos
Requiere el permiso VIEW DATABASE STATE
.
Ejemplos
A Busque la razón por la que SQL Server no pudo forzar un plan a través de QDS
Preste atención a las last_force_failure_reason_desc
columnas y force_failure_count
:
SELECT TOP 1000
p.query_id,
p.plan_id,
p.last_force_failure_reason_desc,
p.force_failure_count,
p.last_compile_start_time,
p.last_execution_time,
q.last_bind_duration,
q.query_parameterization_type_desc,
q.context_settings_id,
c.set_options,
c.STATUS
FROM sys.query_store_plan p
INNER JOIN sys.query_store_query q
ON p.query_id = q.query_id
INNER JOIN sys.query_context_settings c
ON c.context_settings_id = q.context_settings_id
LEFT JOIN sys.query_store_query_text t
ON q.query_text_id = t.query_text_id
WHERE p.is_forced_plan = 1
AND p.last_force_failure_reason != 0;
B. Consulta para ver los resultados del plan de consulta en Azure Synapse Analytics
Use la siguiente consulta de ejemplo para buscar los 100 planes de ejecución más recientes en el Almacén de consultas en Azure Synapse Analytics.
SELECT TOP 100
plan_id,
query_id,
plan_group_id,
engine_version,
compatibility_level,
query_plan_hash,
query_plan,
is_online_index_plan,
is_trivial_plan,
is_parallel_plan,
is_forced_plan,
is_natively_compiled,
force_failure_count,
last_force_failure_reason,
last_force_failure_reason_desc,
count_compiles,
initial_compile_start_time,
last_compile_start_time,
last_execution_time,
avg_compile_duration,
last_compile_duration,
plan_forcing_type,
plan_forcing_type_desc
FROM sys.query_store_plan
ORDER BY last_execution_time DESC;
Contenido relacionado
- Supervisión del rendimiento mediante el Almacén de consultas
- sys.database_query_store_options (Transact-SQL)
- sys.query_context_settings (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL)
- sys.query_store_wait_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
- Vistas de catálogo del sistema (Transact-SQL)
- Procedimientos almacenados del almacén de consultas (Transact-SQL)