分享方式:


sp_query_store_force_plan (Transact-SQL)

適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體

啟用強制 查詢存放區 中特定查詢的特定計劃。

當特定查詢強制執行計劃時,每當 SQL Server 遇到查詢時,就會嘗試在查詢優化器中強制計劃。 如果計劃強制失敗,則會引發擴充事件,並指示查詢優化器以正常方式優化。

Transact-SQL 語法慣例

語法

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

引數

[ @query_id = ] query_id

查詢的識別碼。 @query_id為 bigint,沒有預設值。

[ @plan_id = ] plan_id

要強制的查詢計劃標識碼。 @plan_id是 bigint,沒有預設值。

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

指出是否應停用優化計劃強制。 @disable_optimized_plan_forcing是,預設值為 0

[ @force_plan_scope = ] 'replica_group_id'

啟用次要複本 查詢存放區 時,您可以在次要複本上強制執行計劃。 在次要複本上執行 sp_query_store_force_plansp_query_store_unforce_plan 。 選擇性@force_plan_scope自變數只會預設為本機複本(主要或次要複本),但您可以選擇性地指定參考sys.query_store_replicas replica_group_id

傳回碼值

0 (成功) 或 1 (失敗)。

備註

這項功能所強制產生的執行計劃與強制執行計劃相同或類似。 由於產生的計劃可能與 所 sys.sp_query_store_force_plan指定的計劃不同,因此計劃的效能可能會有所不同。 在罕見的情況下,效能差異可能是顯著且負面的;在此情況下,系統管理員必須移除強制計劃。

使用 sys.query_store_plan_forcing_locations 檢閱次要複本上的強制計劃。

權限

需要資料庫的 ALTER 許可權。

範例

下列範例會傳回 查詢存放區 中查詢的相關信息。

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;

識別 您想要強制執行的query_idplan_id 之後,請使用下列範例來強制查詢使用計劃。

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

使用與sys.query_store_replicas聯結sys.query_store_plan_forcing_locations來擷取次要復本的 查詢存放區。

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