Dela via


sp_query_store_force_plan (Transact-SQL)

gäller för: SQL Server 2016 (13.x) och senare Azure SQL DatabaseAzure SQL Managed Instance

Gör det möjligt att tvinga fram en viss plan för en viss fråga i Query Store.

När en plan tvingas för en viss fråga, varje gång SQL Server stöter på frågan, försöker den framtvinga planen i Frågeoptimeraren. Om planen tvingar misslyckas utlöses en utökad händelse och frågeoptimeraren instrueras att optimera på det normala sättet.

Transact-SQL syntaxkonventioner

Syntax

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

Argument

Viktig

Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.

[ @query_id = ] query_id

ID:t för frågan. @query_id är bigint, utan standard.

[ @plan_id = ] plan_id

ID:t för den frågeplan som ska tvingas. @plan_id är bigint, utan standard.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Anger om optimerad plan framtvingning ska inaktiveras. @disable_optimized_plan_forcing är bit med standardvärdet 0.

[ @force_plan_scope = ] "replica_group_id"

Du kan framtvinga planer på en sekundär replik när Query Store för sekundära repliker är aktiverat. Kör sp_query_store_force_plan och sp_query_store_unforce_plan på den primära repliken. Med argumentet @force_plan_scope används som standard den lokala replik där kommandot körs, men du kan ange en replica_group_id som refererar till sys.query_store_plan_forcing_locations systemkatalogvyn.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Anmärkningar

Den resulterande körningsplanen som framtvingas av den här funktionen är densamma eller liknar den plan som tvingas fram. Eftersom den resulterande planen kanske inte är identisk med den plan som anges av sys.sp_query_store_force_plankan planernas prestanda variera. I sällsynta fall kan prestandaskillnaden vara betydande och negativ. I så fall måste administratören ta bort den framtvingade planen.

Granska framtvingade planer på sekundära repliker med sys.query_store_plan_forcing_locations.

Behörigheter

Kräver ALTER-behörigheten för databasen.

Exempel

I följande exempel returneras information om frågorna i 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;

När du har identifierat query_id och plan_id som du vill framtvinga använder du följande exempel för att tvinga frågan att använda en plan.

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

Använd sys.query_store_plan_forcing_locations, ansluten till sys.query_store_replicasför att hämta Query Store för sekundära repliker.

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