sp_query_store_force_plan (Transact-SQL)

適用対象:SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance

特定のクエリに対して特定のプランを強制できるようにします。

特定のクエリに対してプランが強制されると、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

クエリの ID です。 query_idbigint であり、既定値はありません。

[ @plan_id = ] plan_id

強制されるクエリ プランの ID です。 plan_idbigint であり、既定値はありません。

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

最適化されたプラン強制を無効にするかどうかを示します。 disable_optimized_plan_forcing のデータ型は bit で、既定値は 0 です。

[ @force_plan_scope = ] replica_group_id

セカンダリ レプリカのクエリ ストアが有効になっている場合は、セカンダリ レプリカでプランを強制できます。 セカンダリ レプリカで と sp_query_store_unforce_plan を実行sp_query_store_force_planします。 省略可能な force_plan_scope 引数の既定値はローカル レプリカ (プライマリまたはセカンダリ) のみですが、必要に応じて参照元のsys.query_store_replicasreplica_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
JOIN sys.query_store_query AS Qry
    ON Pl.query_id = Qry.query_id
JOIN sys.query_store_query_text AS Txt
    ON Qry.query_text_id = Txt.query_text_id ;

強制する と plan_idquery_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';

次のステップ

関連する概念の詳細については、次の記事を参照してください。