Freigeben über


sp_query_store_force_plan (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und spätere Versionen Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

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 ,
    [ @replica_group_id = ] 'replica_group_id'
[ ; ]

Argumente

Wichtig

Argumente für erweiterte gespeicherte Prozeduren müssen in der spezifischen Reihenfolge eingegeben werden, wie im Abschnitt Syntax beschrieben. Wenn die Parameter außerhalb der Reihenfolge eingegeben werden, tritt eine Fehlermeldung auf.

[ @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.

[ @replica_group_id = ] 'replica_group_id'

Sie können Pläne für ein sekundäres Replikat erzwingen, wenn der Abfragespeicher für lesbare Secondärdateien aktiviert ist. Führen Sie sp_query_store_force_plan und sp_query_store_unforce_plan für das primäre Replikat aus. Wenn Sie das argument @replica_group_id verwenden, wird standardmäßig das lokale Replikat verwendet, in dem der Befehl ausgeführt wird. Sie können jedoch eine replica_group_id angeben, die auf die sys.query_store_plan_forcing_locations Systemkatalogansicht 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 ALTER Berechtigung 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.

EXECUTE 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 den Abfragespeicher für lesbare Secondärdateien 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';