sys.query_store_plan (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed InstanceAzure 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 このプランの強制が失敗した回数。 これは、クエリが再コンパイルされた場合にのみインクリメントできます ("すべての実行ではなく")。 0に変更FALSETRUEされるたびにis_plan_forcedリセットされます。

注: 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_scriptplan_type_descis_optimized_plan_forcing_disabledplan_typeInvalid Column Name使用すると、サポートされていないためエラーが発生します。 Azure Synapse Analytics での使用方法sys.query_store_planの例については、例 B を参照してください

プランの適用の制限事項

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

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

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

Note

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

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

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

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

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

アクセス許可

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

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

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
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;