sys.query_store_plan (Transact-SQL)
適用対象:SQL Server 2016 (13.x) 以降
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
クエリに関連付けられた各実行プランに関する情報が含まれます。
列名 | データ型 | 説明 |
---|---|---|
plan_id | bigint | 主キー |
query_id | bigint | 外部キー。 sys.query_store_query (Transact-SQL) に結合します。 |
plan_group_id | bigint | プラン グループの ID。 通常、カーソル クエリには複数の (設定とフェッチ) プランが必要です。 一緒にコンパイルされる設定とフェッチのプランは、同じグループ内にあります。 0 は、プランがグループ内にないことを意味します。 |
engine_version | nvarchar(32) | "major.minor.build.revision" 形式でプランをコンパイルするために使われるエンジンのバージョン。 |
compatibility_level | smallint | クエリで参照されているデータベースのデータベース互換レベル。 |
query_plan_hash | binary(8) | 個々のプランの MD5 ハッシュ。 |
query_plan | nvarchar(max) | クエリ プランのプラン表示 XML。 |
is_online_index_plan | bit | プランは、オンライン インデックス ビルドの間に使われました。 注: Azure Synapse Analytics からは常にゼロ (0) が返されます。 |
is_trivial_plan | bit | プランは単純なプランです (クエリ オプティマイザーのステージ 0 の出力)。 注: Azure Synapse Analytics からは常にゼロ (0) が返されます。 |
is_parallel_plan | bit | プランは並列です。 注: Azure Synapse Analytics からは常に 1 が返されます。 |
is_forced_plan | bit | ユーザーがストアド プロシージャ sys.sp_query_store_force_plan を実行するとき、プランは強制としてマークされます。 強制メカニズムでは、このプランが query_id によって参照されているクエリに正確に使用されることは "保証されません"。 プランの強制により、クエリが再度コンパイルされて、通常は、plan_id によって参照されているプランとまったく同じ、または似たプランが生成されます。 プランの強制が成功しなかった場合は、force_failure_count がインクリメントされ、last_force_failure_reason にエラーの理由が設定されます。 注: Azure Synapse Analytics からは常にゼロ (0) が返されます。 |
is_natively_compiled | bit | プランには、ネイティブ コンパイル メモリ最適化プロシージャが含まれています。 (0 = FALSE、1 = TRUE)。 注: Azure Synapse Analytics からは常にゼロ (0) が返されます。 |
force_failure_count | bigint | このプランの強制が失敗した回数。 これは、クエリが再コンパイルされた場合にのみインクリメントできます ("すべての実行ではなく")。 is_plan_forced が FALSE から TRUE に変更されるたびに、0 にリセットされます。 注: Azure Synapse Analytics からは常にゼロ (0) が返されます。 |
last_force_failure_reason | int | プランの強制が失敗した理由。 0: エラーなし。それ以外の場合は、強制が失敗した原因になったエラーのエラー番号 8637: ONLINE_INDEX_BUILD 8675: OPTIMIZATION_REPLAY_FAILED 8683: INVALID_STARJOIN 8684: TIME_OUT 8689: NO_DB 8690: HINT_CONFLICT 8691: SETOPT_CONFLICT 8694: DQ_NO_FORCING_SUPPORTED 8698: NO_PLAN 8712: NO_INDEX 8713: VIEW_COMPILE_FAILED <その他の値>: GENERAL_FAILURE 注: Azure Synapse Analytics からは常にゼロ (0) が返されます。 |
last_force_failure_reason_desc | nvarchar(128) | last_force_failure_reason_desc の説明文。 ONLINE_INDEX_BUILD: クエリは、ターゲット テーブルにオンラインで構築されているインデックスがある間にデータの変更を試みました OPTIMIZATION_REPLAY_FAILED: 最適化再生スクリプトの実行が失敗しました。 INVALID_STARJOIN: プランに無効な StarJoin 指定が含まれます TIME_OUT: オプティマイザーが、強制プランで指定されたプランの検索中に、許可される操作の回数を超えました NO_DB: プランで指定されたデータベースは存在しません。 HINT_CONFLICT: プランがクエリ ヒントと競合するため、クエリをコンパイルできません DQ_NO_FORCING_SUPPORTED: プランが分散クエリまたはフルテキスト操作の使用と競合しているため、クエリを実行できません。 NO_PLAN: クエリに対する強制プランの有効性を検証できなかったため、クエリ プロセッサはクエリ プランを作成できませんでした。 NO_INDEX: プランで指定されているインデックスは存在しなくなりました VIEW_COMPILE_FAILED: プランで参照されているインデックス付きビューに問題があるため、クエリ プランを強制できませんでした。 GENERAL_FAILURE: 一般的な強制エラー (上記の理由でカバーされていないもの) 注: Azure Synapse Analytics からは常に NONE が返されます。 |
count_compiles | bigint | プランのコンパイルの統計。 |
initial_compile_start_time | datetimeoffset | プランのコンパイルの統計。 |
last_compile_start_time | datetimeoffset | プランのコンパイルの統計。 |
last_execution_time | datetimeoffset | 最終実行日時は、クエリやプランの最後の終了日時を示します。 |
avg_compile_duration | float | プランのコンパイルの統計。 |
last_compile_duration | bigint | プランのコンパイルの統計。 |
plan_forcing_type | int | プランの強制の種類。 0: NONE 1: MANUAL 2: AUTO |
plan_forcing_type_desc | nvarchar(60) | plan_forcing_type の説明文。 NONE: プラン強制なし MANUAL: ユーザーによって強制されたプラン AUTO: 自動チューニングによって強制されたプラン。 |
has_compile_replay_script | bit | 適用対象: SQL Server (SQL Server 2022 (16.x) Preview 以降) プランに最適化再生スクリプトが関連付けられているかどうかを示します。 0 = 最適化再生スクリプトはありません (なし、または無効)。 1 = 最適化再生スクリプトが記録されています。 |
is_optimized_plan_forcing_disabled | bit | 適用対象: SQL Server (SQL Server 2022 (16.x) Preview 以降) 最適化されたプラン強制がプランに対して無効にされたかどうかを示します。 0 = 無効にされています。 1 = 無効にされていません。 |
プランの適用の制限事項
クエリ ストアには、クエリ オプティマイザーに特定の実行プランを使用させるためのメカニズムがあります。 ただし、適用の適用を妨げる可能性のある制限がいくつかあります。
第 1 に、プランに次の構造が含まれる場合です。
- INSERT BULK ステートメント
- 外部テーブルの参照
- 分散クエリまたはフルテキスト操作
- グローバル クエリの使用
- 動的カーソルまたはキーセット カーソル
- 無効なスター結合の指定
注意
Azure SQL Database と SQL Server 2019 では、静的カーソルと高速順方向カーソルについてプラン強制がサポートされます。
第 2 に、プランが依存しているオブジェクトが使用できなくなった場合です。
- データベース (プランの基になっているデータベースが存在しなくなった場合)
- インデックス (存在しない場合、または無効になった場合)
最後に、プラン自体に問題がある場合です。
- クエリに対して有効ではない
- クエリ オプティマイザーが許可されている操作の数を超えた
- プランの XML の形式が正しくない
アクセス許可
VIEW DATABASE STATE 権限が必要です。
次の手順
クエリ ストアと関連する概念の詳細については、次の記事を参照してください。
- sys.database_query_store_options (Transact-SQL)
- sys.query_context_settings (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL)
- sys.query_store_wait_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
- クエリのストアを使用した、パフォーマンスの監視
- カタログ ビュー (Transact-SQL)
- クエリ ストアのストアド プロシージャ (Transact-SQL)