Sdílet prostřednictvím


sp_query_store_force_plan (Transact-SQL)

platí pro: SQL Server 2016 (13.x) a novější azure SQL Databaseazure SQL Managed Instance

Umožňuje vynucovat konkrétní plán konkrétního dotazu v úložišti dotazů.

Když je plán vynucen pro konkrétní dotaz, pokaždé, když SQL Server narazí na dotaz, pokusí se vynutit plán v Optimalizátoru dotazů. Pokud dojde k selhání vynucení plánu, aktivuje se rozšířená událost a optimalizátor dotazů se dá pokyn k optimalizaci běžným způsobem.

Transact-SQL konvence syntaxe

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

Argumenty

Důležitý

Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.

[ @query_id = ] query_id

ID dotazu. @query_id je bigint, bez výchozího nastavení.

[ @plan_id = ] plan_id

ID plánu dotazu, který se má vynutit. @plan_id je bigint, bez výchozího nastavení.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Určuje, jestli má být optimalizovaný plán vynucení zakázán. @disable_optimized_plan_forcing je bit s výchozím 0.

[ @force_plan_scope = ] 'replica_group_id'

Plány na sekundární repliku můžete vynutit, když úložiště dotazů pro sekundární repliky povoleno. Na primární replice spusťte sp_query_store_force_plan a sp_query_store_unforce_plan. Pomocí argumentu @force_plan_scope se ve výchozím nastavení použije místní replika, ve které se příkaz spouští, ale můžete zadat replica_group_id odkazující na zobrazení katalogu systému sys.query_store_plan_forcing_locations.

Návratové hodnoty kódu

0 (úspěch) nebo 1 (selhání).

Poznámky

Výsledný plán provádění vynucený touto funkcí je stejný nebo podobný plánu, který je vynucený. Vzhledem k tomu, že výsledný plán nemusí být identický s plánem určeným sys.sp_query_store_force_plan, může se výkon plánů lišit. Ve výjimečných případech může být rozdíl v výkonu významný a negativní; v takovém případě musí správce odebrat vynucený plán.

Zkontrolujte vynucené plány na sekundárních replikách pomocí sys.query_store_plan_forcing_locations.

Dovolení

Vyžaduje oprávnění ALTER pro databázi.

Příklady

Následující příklad vrátí informace o dotazech v úložišti dotazů.

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;

Po identifikaci query_id a plan_id, které chcete vynutit, použijte následující příklad k vynucení použití plánu dotazu.

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

K načtení úložiště dotazů pro sekundární replikypoužijte sys.query_store_plan_forcing_locations, připojené k sys.query_store_replicas.

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