sp_query_store_force_plan (Transact-SQL)
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance
クエリ ストア内の特定のクエリに対して特定のプランを強制できるようにします。
特定のクエリに対してプランが強制されると、SQL Server でクエリが検出されるたびに、クエリ オプティマイザーでプランの強制が試行されます。 プランの適用に失敗した場合、拡張イベントが発生し、クエリ オプティマイザーは通常の方法で最適化するように指示します。
構文
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_id は bigint で、既定値はありません。
[ @plan_id = ] plan_id
強制されるクエリ プランの 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_plan
と sp_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_id と plan_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';
関連するコンテンツ
- sys.query_store_plan_forcing_locations (Transact-SQL)
- sys.query_store_replicas (Transact-SQL)
- sp_query_store_remove_plan (Transact-SQL)
- sp_query_store_remove_query (Transact-SQL)
- sp_query_store_unforce_plan (Transact-SQL)
- クエリ ストアのカタログ ビュー (Transact-SQL)
- クエリ ストアを使用したパフォーマンスの監視
- sp_query_store_reset_exec_stats (Transact-SQL)
- sp_query_store_flush_db (Transact-SQL)
- クエリ ストアを使用する際の推奨事項