sys.dm_exec_query_plan_stats (Transact-SQL)

適用対象:SQL Server 2019 以降 Azure SQL Database Azure Synapse Analytics Parallel Data Warehouse

以前にキャッシュされたクエリ プランの最後の既知の実際の実行プランに相当する を返します。

構文

sys.dm_exec_query_plan_stats(plan_handle)  

引数

plan_handle
実行されたバッチとそのプランがプラン キャッシュに存在するか、現在実行中のバッチのクエリ実行プランを一意に識別するトークンです。 plan_handlevarbinary(64)です

この plan_handle は、次の動的管理オブジェクトから取得できます。

返されるテーブル

列名 データ型 説明
dbid smallint このプランに対応する Transact-SQL ステートメントのコンパイル時に有効だったコンテキスト データベースの ID。 アドホック SQL ステートメントおよび準備された SQL ステートメントの場合、ステートメントがコンパイルされたデータベースの ID。

NULL 値は許可されます。
objectid int ストアド プロシージャやユーザー定義関数など、クエリ プランのオブジェクトの ID。 アドホック バッチおよび準備されたバッチの場合、この列の値は NULL です。

NULL 値は許可されます。
number smallint ストアド プロシージャに付けられた番号 (整数)。 たとえば、orders アプリケーションのプロシージャ グループの名前は、orderproc;1orderproc;2 のように指定されることがあります。 アドホック バッチおよび準備されたバッチの場合、この列の値は NULL です。

NULL 値は許可されます。
暗号化 bit 対応するプロシージャが暗号化されているかどうか。

0 = 暗号化されていない

1 = 暗号化されている

NULL 値は許可されません。
query_plan xml クエリで指定された実際のクエリ実行プランの最後の既知のランタイムプラン 表示plan_handle。 プラン表示は XML 形式です。 アドホック Transact-SQL ステートメント、ストアド プロシージャ呼び出し、ユーザー定義関数呼び出しなど、 を含むバッチごとに 1 つのプランが生成されます。

NULL 値は許可されます。

注釈

これはオプトイン機能です。 サーバー レベルで有効にするには 、トレース フラグ 2451 を使用します。 データベース レベルで有効にするには、ALTER DATABASE SCOPED CONFIGURATION (Transact-LAST_QUERY_PLAN_STATS CONFIGURATION) の LAST_QUERY_PLAN_STATS オプションを使用SQL。

このシステム関数は、軽量クエリ実行 統計 プロファイル インフラストラクチャで機能します。 詳細については、「クエリ プロファイリング インフラストラクチャ」を参照してください。

の Showplan 出力には sys.dm_exec_query_plan_stats 、次の情報が含まれます。

  • キャッシュされたプランで見つかったすべてのコンパイル時情報
  • オペレーターあたりの実際の行数、クエリの合計 CPU 時間と実行時間、スピル警告、実際の DOP、最大使用メモリ、許可されたメモリなどのランタイム情報

次の条件では、 の返されたテーブルの query_plan 列に、実際の実行プランと同等のプラン表示出力が返されます

次の条件では、 の返されたテーブルの query_plan 列に、簡略化された 1 つのプラン表示出力が返されます

  • プランは、 次のsys.dm_exec_cached_plans
    AND
  • クエリは十分に単純で、通常は OLTP ワークロードの一部として分類されます。

1 ルート ノード演算子 (SELECT) のみを含むプラン表示を参照します。

次の条件では 、 からの出力は返 されません

  • を使用して指定されたクエリ プラン plan_handle は、プラン キャッシュから削除されました。
    OR
  • クエリ プランは、最初はキャッシュできません。 詳細については、「実行プランの キャッシュと再利用」を参照してください

Note

xml データ型で許可される入れ子レベルの数に制限が生じ、128 レベル以上の入れ子になった要素を満たすクエリ プランを返す必要があります。 以前のバージョンの SQL Serverでは、この条件によってクエリ プランが返されるのを防ぎ、エラー 6335 が生成されました。 2005 SQL Server (9.x) Service Pack 2 query_plan 以降のバージョンでは、列は NULL を返します。

アクセス許可

サーバーに対する VIEW SERVER STATE 権限が必要です。

A. 特定のキャッシュされたプランの最後の既知の実際のクエリ実行プランを確認する

次の例では、 sys.dm_exec_cached_plans を検索し、出力からその プランをコピーします。

SELECT * FROM sys.dm_exec_cached_plans;  
GO  

次に、最後に既知の実際のクエリ実行プランを取得plan_handleするには、コピーした をシステム関数と一緒に使用plan_handle

SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);  
GO  

B. キャッシュされたプランすべてについて、最後に確認された実際のクエリ実行プランを確認する

SELECT *   
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;  
GO  

C. 特定のキャッシュされたプランとクエリ テキストの最後の既知の実際のクエリ実行プランを確認する

SELECT *   
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';  
GO  

D. トリガーのキャッシュされたイベントを確認する

SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype ='Trigger';
GO

参照

トレース フラグ
動的管理ビューと関数 (Transact-SQL)
実行関連の動的管理ビュー (Transact-SQL)