sys.dm_exec_cached_plans (Transact-SQL)

クエリ実行を高速化するため SQL Server でキャッシュされた各クエリ プランについての行を返します。 この動的管理ビューを使用して、キャッシュされたクエリ プラン、キャッシュされたクエリ テキスト、キャッシュされたプランが確保するメモリの量、およびキャッシュされたプランの再利用回数を参照できます。

列名

データ型

説明

bucketid

int

エントリをキャッシュするハッシュ バケットの ID。 値の範囲は、0 からキャッシュの種類によって決まっているハッシュ テーブルのサイズまでです。

SQL プランおよびオブジェクト プランのキャッシュでは、ハッシュ テーブルのサイズが 32 ビット システムで最大 10007、64 ビット システムで最大 40009 です。 Bound Trees のキャッシュでは、ハッシュ テーブルのサイズが 32 ビット システムで最大 1009、64 ビット システムで最大 4001 です。 拡張ストアド プロシージャのキャッシュでは、ハッシュ テーブルのサイズが 32 ビット システムでも 64 ビット システムでも 127 です。

refcounts

int

このキャッシュ オブジェクトを参照しているキャッシュ オブジェクトの数。 エントリをキャッシュするには、refcounts を 1 以上にする必要があります。

usecounts

int

キャッシュ オブジェクトが検索された回数。 パラメーター化クエリがキャッシュ内のプランを検索したときは増加しません。 プラン表示を使用しているときは複数回増加できます。

size_in_bytes

int

キャッシュ オブジェクトによって使用されたバイト数。

memory_object_address

varbinary(8)

キャッシュ エントリのメモリ アドレス。 この値は、sys.dm_os_memory_objects と併用してキャッシュされたプランのメモリ内訳を取得したり、sys.dm_os_memory_cache_entries と併用してエントリをキャッシュするコストを取得したりできます。

cacheobjtype

nvarchar(34)

キャッシュ内のオブジェクトの種類。 値は、次のいずれかです。

  • Compiled Plan

  • Compiled Plan Stub

  • Parse Tree

  • Extended Proc

  • CLR Compiled Func

  • CLR Compiled Proc

objtype

nvarchar(16)

オブジェクトの種類。 値は、次のいずれかです。

説明

Proc

ストアド プロシージャ

Prepared

準備済みステートメント

Adhoc

アドホック クエリ1

ReplProc

レプリケーション フィルター プロシージャ

Trigger

トリガー

View

ビュー

Default

既定

UsrTab

ユーザー テーブル

SysTab

システム テーブル

Check

CHECK 制約

Rule

規則

plan_handle

varbinary(64)

インメモリ プランの識別子。 この識別子は一時的なもので、プランがキャッシュに残っている間だけ一定の値になります。 この値は、次の動的管理関数で使用できます。

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes

pool_id

int

このプランのメモリ使用量の大部分を占めるリソース プールの ID。

1  リモート プロシージャ呼び出しとしてではなく、osql または sqlcmd によって言語イベントとして送信された Transact-SQL。

権限

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

使用例

A. 再利用されたキャッシュ エントリのバッチ テキストを取得する

次の例は、複数回使用されたすべてのキャッシュ エントリの SQL テキストを返します。

SELECT usecounts, cacheobjtype, objtype, text 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE usecounts > 1 
ORDER BY usecounts DESC;
GO

B. キャッシュされたすべてのトリガーのクエリ プランを取得する

次の例は、キャッシュされたすべてのトリガーのクエリ プランを返します。

SELECT plan_handle, query_plan, objtype 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
WHERE objtype ='Trigger';
GO

C. プランをコンパイルした SET オプションを取得する

次の例は、プランをコンパイルした SET オプションを返します。 プランの sql_handle も返されます。 PIVOT 演算子を使用すると、set_options 属性と sql_handle 属性を行ではなく列として出力できます。 set_options の返す値の詳細については、「sys.dm_exec_plan_attributes (Transact-SQL)」を参照してください。

SELECT plan_handle, pvt.set_options, pvt.sql_handle
FROM (
      SELECT plan_handle, epa.attribute, epa.value 
      FROM sys.dm_exec_cached_plans 
      OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
      WHERE cacheobjtype = 'Compiled Plan'
      ) AS ecpa 
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;
GO

D. キャッシュされたすべてのコンパイル済みプランのメモリ内訳を取得する

次の例は、キャッシュにあるすべてのコンパイル済みプランのメモリ内訳を返します。

SELECT plan_handle, ecp.memory_object_address AS CompiledPlan_MemoryObject, 
    omo.memory_object_address, pages_allocated_count, type, page_size_in_bytes 
FROM sys.dm_exec_cached_plans AS ecp 
JOIN sys.dm_os_memory_objects AS omo 
    ON ecp.memory_object_address = omo.memory_object_address 
    OR ecp.memory_object_address = omo.parent_address
WHERE cacheobjtype = 'Compiled Plan';
GO

関連項目

参照

動的管理ビューおよび関数 (Transact-SQL)

実行関連の動的管理ビューおよび関数 (Transact-SQL)

sys.dm_exec_query_plan (Transact-SQL)

sys.dm_exec_plan_attributes (Transact-SQL)

sys.dm_exec_sql_text (Transact-SQL)

sys.dm_os_memory_objects (Transact-SQL)

sys.dm_os_memory_cache_entries (Transact-SQL)

FROM (Transact-SQL)