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: エラーなし。それ以外の場合は、強制が失敗した原因になったエラーのエラー番号
3617: COMPILATION_ABORTED_BY_CLIENT
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の説明テキスト。

COMPILATION_ABORTED_BY_CLIENT: 完了する前にクライアントがクエリのコンパイルを中止しました
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 コンパイル統計をマイクロ秒単位で計画します。 秒を取得するには、1,000,000 で除算します。
last_compile_duration bigint コンパイル統計をマイクロ秒単位で計画します。 秒を取得するには、1,000,000 で除算します。
plan_forcing_type int 適用対象: SQL Server 2017 (14.x) 以降のバージョン

プランの強制の種類。

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) 適用対象: SQL Server 2017 (14.x) 以降のバージョン

plan_forcing_typeのテキストの説明。

NONE: プラン強制なし
MANUAL: ユーザーによる強制的な計画
AUTO: 自動チューニングによって強制を計画します。
has_compile_replay_script bit 適用対象: SQL Server 2022 (16.x) 以降のバージョン

プランに最適化再生スクリプトが関連付けられているかどうかを示します。
0 = 最適化再生スクリプトはありません (なし、または無効)。
1 = 最適化再生スクリプトが記録されています。

Azure Synapse Analytics には適用されません。
is_optimized_plan_forcing_disabled bit 適用対象: SQL Server 2022 (16.x) 以降のバージョン

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

Azure Synapse Analytics には適用されません。
plan_type int 適用対象: SQL Server 2022 (16.x) 以降のバージョン

プランの種類。
0: コンパイル済みプラン
1: ディスパッチャー プラン
2: クエリ バリアント プラン

Azure Synapse Analytics には適用されません。
plan_type_desc nvarchar(120) 適用対象: SQL Server 2022 (16.x) 以降のバージョン

プランの種類のテキストの説明。
コンパイル済みプラン: プランがパラメーターに依存しないプラン最適化プランであることを示します
ディスパッチャー プラン: プランがパラメーターに依存するプラン最適化ディスパッチャー プランであることを示します
クエリ バリアント プラン: プランがパラメーターに依存するプラン最適化クエリ バリアント プランであることを示します

Azure Synapse Analytics には適用されません。

解説

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

Azure Synapse Analytics では、列 has_compile_replay_scriptis_optimized_plan_forcing_disabledplan_typeを使用 plan_type_desc 、サポートされていないため、 Invalid Column Name エラーが発生します。 Azure Synapse Analytics でsys.query_store_planを使用する方法の例については、Example B を参照してください。

プランの適用の制限事項

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

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

  • 一括ステートメントを挿入する
  • 外部テーブルの参照
  • 分散クエリまたはフルテキスト操作
  • 弾性クエリの使用
  • 動的カーソルまたはキーセット カーソル
  • 無効なスター結合の指定

Note

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

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

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

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

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

アクセス許可

VIEW DATABASE STATE アクセス許可が必要です。

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

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

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
INNER JOIN sys.query_store_query q
    ON p.query_id = q.query_id
INNER 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;

B. Azure Synapse Analytics でクエリ プランの結果を表示するクエリ

次のサンプル クエリを使用して、Azure Synapse Analytics のクエリ ストアで最新の 100 個の実行プランを検索します。

SELECT TOP 100
    plan_id,
    query_id,
    plan_group_id,
    engine_version,
    compatibility_level,
    query_plan_hash,
    query_plan,
    is_online_index_plan,
    is_trivial_plan,
    is_parallel_plan,
    is_forced_plan,
    is_natively_compiled,
    force_failure_count,
    last_force_failure_reason,
    last_force_failure_reason_desc,
    count_compiles,
    initial_compile_start_time,
    last_compile_start_time,
    last_execution_time,
    avg_compile_duration,
    last_compile_duration,
    plan_forcing_type,
    plan_forcing_type_desc
FROM sys.query_store_plan
ORDER BY last_execution_time DESC;