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_forcedFALSE から 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) 以降)

プランに最適化再生スクリプトが関連付けられているかどうかを示します。

0 = 最適化再生スクリプトはありません (なし、または無効)。

1 = 最適化再生スクリプトが記録されています。
is_optimized_plan_forcing_disabled bit 適用対象: SQL Server (SQL Server 2022 (16.x) 以降)

最適化されたプラン強制がプランに対して無効にされたかどうかを示します。

0 = 無効にされています。

1 = 無効にされていません。
plan_type INT 適用対象: SQL Server (SQL Server 2022 (16.x) 以降)

プランの種類。

0: コンパイル済みプラン

1: ディスパッチャー プラン

2: クエリ バリアント プラン
plan_type_desc nvarchar(120) 適用対象: SQL Server (SQL Server 2022 (16.x) 以降)

プランの種類のテキストの説明。

コンパイル済みプラン: プランがパラメーターに依存しないプラン最適化プランであることを示します

ディスパッチャー プラン: プランがパラメーターに依存するプラン最適化ディスパッチャー プランであることを示します

クエリ バリアント プラン: プランがパラメーターに依存するプラン最適化クエリ バリアント プランであることを示します

解説

セカンダリ レプリカのクエリ ストアが有効になっている場合、複数のプランを強制できます。

プランの適用の制限事項

クエリ ストアには、クエリ オプティマイザーに特定の実行プランを使用させるためのメカニズムがあります。 ただし、適用の適用を妨げる可能性のある制限がいくつかあります。

第 1 に、プランに次の構造が含まれる場合です。

  • INSERT BULK ステートメント
  • 外部テーブルの参照
  • 分散クエリまたはフルテキスト操作
  • グローバル クエリの使用
  • 動的カーソルまたはキーセット カーソル
  • 無効なスター結合の指定

注意

Azure SQL Database および SQL Server 2019 以降のビルド バージョンでは、静的カーソルと高速順方向カーソルのプラン強制がサポートされています。

第 2 に、プランが依存しているオブジェクトが使用できなくなった場合です。

  • データベース (プランの基になっているデータベースが存在しなくなった場合)
  • インデックス (存在しない場合、または無効になった場合)

最後に、プラン自体に問題がある場合です。

  • クエリに対して有効ではない
  • クエリ オプティマイザーが許可されている操作の数を超えた
  • プランの XML の形式が正しくない

アクセス許可

VIEW DATABASE STATE 権限が必要です。

A. QDS を介してプランSQL Server強制できなかった理由を見つける

列と force_failure_count 列にlast_force_failure_reason_desc注意してください。

SELECT TOP 1000
      p.query_id
       , p.plan_id
       , p.last_force_failure_reason_desc
       , p.force_failure_count
       , p.last_compile_start_time
       , p.last_execution_time
       , q.last_bind_duration
       , q.query_parameterization_type_desc
       , q.context_settings_id
       , c.set_options
       , c.status
    FROM sys.query_store_plan p
    JOIN sys.query_store_query q ON p.query_id = q.query_id
       JOIN sys.query_context_settings c ON c.context_settings_id = q.context_settings_id
       LEFT JOIN sys.query_store_query_text t ON q.query_text_id = t.query_text_id
    WHERE p.is_forced_plan = 1 and p.last_force_failure_reason != 0;

次の手順

クエリ ストアと関連する概念の詳細については、次の記事を参照してください。