sp_query_store_force_plan (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed Instance

Permite forzar un plan determinado para una consulta determinada en el Almacén de consultas.

Cuando se fuerza un plan para una consulta concreta, cada vez que SQL Server encuentra la consulta, intenta forzar el plan en el optimizador de consultas. Si se produce un error al exigir el plan, se producirá un evento extendido y el optimizador de consultas realizará su trabajo de forma normal.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_query_store_force_plan
    [ @query_id = ] query_id ,
    [ @plan_id = ] plan_id ,
    [ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing ,
    [ @force_plan_scope = ] 'replica_group_id'
[ ; ]

Argumentos

[ @query_id = ] query_id

Identificador de la consulta. @query_id es bigint, sin valor predeterminado.

[ @plan_id = ] plan_id

Identificador del plan de consulta que se va a forzar. @plan_id es bigint, sin valor predeterminado.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Indica si se debe deshabilitar el forzado de plan optimizado. @disable_optimized_plan_forcing es bit con un valor predeterminado de 0.

[ @force_plan_scope = ] 'replica_group_id'

Puede forzar planes en una réplica secundaria cuando Almacén de consultas para réplicas secundarias habilitadas. Ejecute sp_query_store_force_plan y sp_query_store_unforce_plan en la réplica secundaria. El argumento opcional @force_plan_scope solo tiene como valor predeterminado la réplica local (principal o secundaria), pero opcionalmente puede especificar un replica_group_id que haga referencia a sys.query_store_replicas.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

El plan de ejecución resultante forzado por esta característica es el mismo o similar al que se fuerza el plan. Dado que el plan resultante puede no ser idéntico al plan especificado por sys.sp_query_store_force_plan, el rendimiento de los planes puede variar. En raras ocasiones, la diferencia de rendimiento puede ser significativa y negativa. En ese caso, el administrador debe quitar el plan forzado.

Revise los planes forzados en las réplicas secundarias con sys.query_store_plan_forcing_locations.

Permisos

Requiere el permiso ALTER en la base de datos.

Ejemplos

En el ejemplo siguiente se devuelve información sobre las consultas del Almacén de consultas.

SELECT txt.query_text_id,
    txt.query_sql_text,
    pl.plan_id,
    qry.*
FROM sys.query_store_plan AS pl
INNER JOIN sys.query_store_query AS qry
    ON pl.query_id = qry.query_id
INNER JOIN sys.query_store_query_text AS txt
    ON qry.query_text_id = txt.query_text_id;

Después de identificar el query_id y plan_id que desea forzar, use el ejemplo siguiente para forzar la consulta a usar un plan.

EXEC sp_query_store_force_plan
    @query_id = 3,
    @plan_id = 3;

Use sys.query_store_plan_forcing_locations, unido a sys.query_store_replicas, para recuperar los planes de Almacén de consultas forzados en todas las réplicas secundarias.

SELECT query_plan
FROM sys.query_store_plan AS qsp
INNER JOIN sys.query_store_plan_forcing_locations AS pfl
    ON pfl.query_id = qsp.query_id
INNER JOIN sys.query_store_replicas AS qsr
    ON qsr.replica_group_id = qsp.replica_group_id
WHERE qsr.replica_name = 'yourSecondaryReplicaName';