Teilen über


sp_query_store_force_plan (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance

Ermöglicht das Erzwingen eines bestimmten Plans für eine bestimmte Abfrage im Abfragespeicher.

Wenn ein Plan für eine bestimmte Abfrage erzwungen wird, versucht SQL Server bei jedem Zugriff auf die Abfrage, den Plan im Abfrageoptimierer zu erzwingen. Wenn der Plan nicht erzwungen werden kann, wird ein erweitertes Ereignis ausgelöst, und der Abfrageoptimierer wird angewiesen, die Optimierung auf die übliche Weise durchzuführen.

Transact-SQL-Syntaxkonventionen

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

Argumente

[ @query_id = ] query_id

Die ID der Abfrage. @query_id ist großint, ohne Standard.

[ @plan_id = ] plan_id

Die ID des Abfrageplans, der erzwungen werden soll. @plan_id ist großint, ohne Standard.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Gibt an, ob das Erzwingen eines optimierten Plans deaktiviert werden soll. @disable_optimized_plan_forcing ist bit mit einem Standardwert von 0.

[ @force_plan_scope = ] 'replica_group_id'

Sie können Pläne für ein sekundäres Replikat erzwingen, wenn Abfragespeicher für sekundäre Replikate aktiviert ist. Führen Sie das sekundäre Replikat aus sp_query_store_force_plan und sp_query_store_unforce_plan führen Sie es aus. Das optionale @force_plan_scope-Argument ist standardmäßig nur für das lokale Replikat (primär oder sekundär) festgelegt, Sie können aber optional eine replica_group_id angeben, die auf sys.query_store_replicas verweist.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Hinweise

Der resultierende Ausführungsplan, der von diesem Feature erzwungen wird, ist identisch oder ähnlich wie der Plan, der erzwungen wird. Da der resultierende Plan möglicherweise nicht mit dem durch sys.sp_query_store_force_planden angegebenen Plan identisch ist, kann die Leistung der Pläne variieren. In seltenen Fällen kann der Leistungsunterschied signifikant und negativ sein; in diesem Fall muss der Administrator den erzwungenen Plan entfernen.

Überprüfen Sie erzwungene Pläne für sekundäre Replikate mit sys.query_store_plan_forcing_locations.

Berechtigungen

Erfordert die Berechtigung ALTER für die Datenbank.

Beispiele

Im folgenden Beispiel werden Informationen zu den Abfragen im Abfragespeicher zurückgegeben.

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;

Nachdem Sie die query_id und plan_id identifiziert haben, die Sie erzwingen möchten, verwenden Sie das folgende Beispiel, um die Abfrage zur Verwendung eines Plans zu erzwingen.

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

Verwenden Sie sys.query_store_plan_forcing_locations, die mit sys.query_store_replicas verknüpft sind, um Abfragespeicher für sekundäre Replikate abzurufen.

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