Delen via


sp_query_store_force_plan (Transact-SQL)

van toepassing op: SQL Server 2016 (13.x) en hoger Azure SQL DatabaseAzure SQL Managed Instance

Hiermee kunt u een bepaald plan afdwingen voor een bepaalde query in de Query Store.

Wanneer een plan wordt gedwongen voor een bepaalde query, telkens wanneer SQL Server de query tegenkomt, wordt geprobeerd het plan af te dwingen in de Query Optimizer. Als het afdwingen van plannen mislukt, wordt een uitgebreide gebeurtenis geactiveerd en wordt de queryoptimalisatie op de normale manier geïnstrueerd.

Transact-SQL syntaxisconventies

Syntaxis

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'
[ ; ]

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

[ @query_id = ] query_id

De id van de query. @query_id is grote, zonder standaardinstelling.

[ @plan_id = ] plan_id

De id van het queryplan dat moet worden geforceerd. @plan_id is bigint, zonder standaardinstelling.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Hiermee wordt aangegeven of het afdwingen van een geoptimaliseerd plan moet worden uitgeschakeld. @disable_optimized_plan_forcing is bit met een standaardwaarde van 0.

[ @force_plan_scope = ] 'replica_group_id'

U kunt plannen op een secundaire replica afdwingen wanneer Query Store voor secundaire replica's is ingeschakeld is ingeschakeld. Voer sp_query_store_force_plan en sp_query_store_unforce_plan uit op de primaire replica. Als u het argument @force_plan_scope gebruikt, wordt standaard de lokale replica gebruikt waar de opdracht wordt uitgevoerd, maar u kunt een replica_group_id opgeven die verwijst naar de sys.query_store_plan_forcing_locations systeemcatalogusweergave.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Opmerkingen

Het resulterende uitvoeringsplan dat door deze functie wordt gedwongen, is hetzelfde of vergelijkbaar met het plan dat wordt gedwongen. Omdat het resulterende plan mogelijk niet identiek is aan het plan dat is opgegeven door sys.sp_query_store_force_plan, kunnen de prestaties van de plannen variëren. In zeldzame gevallen kan het prestatieverschil aanzienlijk en negatief zijn; In dat geval moet de beheerder het geforceerde plan verwijderen.

Bekijk geforceerde plannen op secundaire replica's met sys.query_store_plan_forcing_locations.

Machtigingen

Hiervoor is de machtiging ALTER vereist voor de database.

Voorbeelden

In het volgende voorbeeld wordt informatie geretourneerd over de query's in de Query Store.

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;

Nadat u de query_id en plan_id hebt geïdentificeerd die u wilt afdwingen, gebruikt u het volgende voorbeeld om af te dwingen dat de query een plan gebruikt.

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

Gebruik sys.query_store_plan_forcing_locations, gekoppeld aan sys.query_store_replicas, om Query Store op te halen voor secundaire replica's.

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';