dm_exec_cached_plans (Transact-sql)sys.dm_exec_cached_plans (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

クエリ実行を高速化するため SQL ServerSQL Server でキャッシュされた各クエリ プランについての行を返します。Returns a row for each query plan that is cached by SQL ServerSQL Server for faster query execution. この動的管理ビューを使用して、キャッシュされたクエリ プラン、キャッシュされたクエリ テキスト、キャッシュされたプランが確保するメモリの量、およびキャッシュされたプランの再利用回数を参照できます。You can use this dynamic management view to find cached query plans, cached query text, the amount of memory taken by cached plans, and the reuse count of the cached plans.

[!INCLUDE[ssSDSfull](../../includes/] では、動的管理ビューは、データベースの包含に影響する情報を公開することも、ユーザーがアクセスできる他のデータベースに関する情報を公開することもできません。In [!INCLUDE[ssSDSfull](../../includes/], dynamic management views cannot expose information that would impact database containment or expose information about other databases the user has access to. この情報を公開しないように、接続されたテナントに属していないデータを含むすべての行がフィルターで除外されます。さらに、列**memory_object_address**および**pool_id**の値はフィルター処理されます。列の値が NULL に設定されています。To avoid exposing this information, every row that contains data that doesn't belong to the connected tenant is filtered out. In addition, the values in the columns **memory_object_address** and **pool_id** are filtered; the column value is set to NULL. > [!NOTE] > またはから[!INCLUDE[ssSDWfull](../../includes/]これを[!INCLUDE[ssPDW](../../includes/]呼び出すには、 **dm_pdw_nodes_exec_cached_plans**という名前を使用します。To call this from [!INCLUDE[ssSDWfull](../../includes/] or [!INCLUDE[ssPDW](../../includes/], use the name **sys.dm_pdw_nodes_exec_cached_plans**. |列名Column name|データ型Data type|[説明]Description| |-----------------|---------------|-----------------| |bucketidbucketid|**int****int**|エントリをキャッシュするハッシュ バケットの ID。ID of the hash bucket in which the entry is cached. 値の範囲は、0 からキャッシュの種類によって決まっているハッシュ テーブルのサイズまでです。The value indicates a range from 0 through the hash table size for the type of cache.

SQL プランおよびオブジェクト プランのキャッシュでは、ハッシュ テーブルのサイズが 32 ビット システムで最大 10007、64 ビット システムで最大 40009 です。For the SQL Plans and Object Plans caches, the hash table size can be up to 10007 on 32-bit systems and up to 40009 on 64-bit systems. Bound Trees のキャッシュでは、ハッシュ テーブルのサイズが 32 ビット システムで最大 1009、64 ビット システムで最大 4001 です。For the Bound Trees cache, the hash table size can be up to 1009 on 32-bit systems and up to 4001 on 64-bit systems. 拡張ストアド プロシージャのキャッシュでは、ハッシュ テーブルのサイズが 32 ビット システムでも 64 ビット システムでも 127 です。For the Extended Stored Procedures cache the hash table size can be up to 127 on 32-bit and 64-bit systems.| |refcountsrefcounts|**int****int**|このキャッシュ オブジェクトを参照しているキャッシュ オブジェクトの数。Number of cache objects that are referencing this cache object. エントリをキャッシュに登録するには、 **Refcounts**が1以上である必要があります。**Refcounts** must be at least 1 for an entry to be in the cache.| |usecountsusecounts|**int****int**|キャッシュ オブジェクトが検索された回数。Number of times the cache object has been looked up. パラメーター化クエリがキャッシュ内のプランを検索したときは増加しません。Not incremented when parameterized queries find a plan in the cache. プラン表示を使用しているときは複数回増加できます。Can be incremented multiple times when using showplan.| |size_in_bytessize_in_bytes|**int****int**|キャッシュ オブジェクトによって使用されたバイト数。Number of bytes consumed by the cache object.| |memory_object_addressmemory_object_address|**varbinary (8)****varbinary(8)**|キャッシュ エントリのメモリ アドレス。Memory address of the cached entry. この値は、[sys.dm_os_memory_objects](../../relational-databases/system-dynamic-management-views/ と併用してキャッシュされたプランのメモリ内訳を取得したり、[sys.dm_os_memory_cache_entries](../../relational-databases/system-dynamic-management-views/ と併用してエントリをキャッシュするコストを取得したりできます。This value can be used with [sys.dm_os_memory_objects](../../relational-databases/system-dynamic-management-views/ to get the memory breakdown of the cached plan and with [sys.dm_os_memory_cache_entries](../../relational-databases/system-dynamic-management-views/ to obtain the cost of caching the entry.| |cacheobjtypecacheobjtype|**nvarchar (34)****nvarchar(34)**|キャッシュ内のオブジェクトの種類。Type of object in the cache. 値は次のいずれかになります。The value can be one of the following:

Compiled PlanCompiled Plan

Compiled Plan StubCompiled Plan Stub

Parse TreeParse Tree

Extended ProcExtended Proc

CLR Compiled FuncCLR Compiled Func

CLR Compiled ProcCLR Compiled Proc| |objtypeobjtype|**nvarchar (16)****nvarchar(16)**|オブジェクトの種類。Type of object. 有効な値とそれに対応する説明を次に示します。Below are the possible values and their corresponding descriptions.

Proc: ストアドプロシージャProc: Stored procedure
準備完了: 準備されたステートメントPrepared: Prepared statement
アドホック: アドホッククエリ。Adhoc: Ad hoc query. リモートプロシージャ[!INCLUDE[tsql](../../includes/]呼び出しとしてではなく**osql**または**sqlcmd**を使用して、言語イベントとして送信されたを示します。Refers to [!INCLUDE[tsql](../../includes/] submitted as language events by using **osql** or **sqlcmd** instead of as remote procedure calls.
ReplProc: レプリケーション-フィルター-プロシージャReplProc: Replication-filter-procedure
トリガー: トリガーTrigger: Trigger
ビュー: 表示View: View
既定値: 既定Default: Default
UsrTab: User テーブルUsrTab: User table
SysTab: システムテーブルSysTab: System table
Check: CHECK 制約Check: CHECK constraint
ルール: ルールRule: Rule| |plan_handleplan_handle|**varbinary (64)****varbinary(64)**|インメモリ プランの識別子。Identifier for the in-memory plan. この識別子は一時的なもので、プランがキャッシュに残っている間だけ一定の値になります。This identifier is transient and remains constant only while the plan remains in the cache. この値は、次の動的管理関数で使用できます。This value may be used with the following dynamic management functions:



[sys.dm_exec_plan_attributessys.dm_exec_plan_attributes](../../relational-databases/system-dynamic-management-views/| |pool_idpool_id|**int****int**|このプランのメモリ使用量の大部分を占めるリソース プールの ID。The ID of the resource pool against which this plan memory usage is accounted for.| |pdw_node_idpdw_node_id|**int****int**|**適用対象**: [!INCLUDE[ssSDWfull](../../includes/]、[!INCLUDE[ssPDW](../../includes/]**Applies to**: [!INCLUDE[ssSDWfull](../../includes/], [!INCLUDE[ssPDW](../../includes/]

このディストリビューションが配置されているノードの識別子。The identifier for the node that this distribution is on.| 11 ## アクセス許可Permissions

SQL ServerSQL Serverは、 VIEW SERVER STATE権限が必要です。On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
Premium SQL DatabaseSQL Databaseレベルでは、データベースVIEW DATABASE STATEの権限が必要です。On SQL DatabaseSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. Standard SQL DatabaseSQL Databaseレベルおよび Basic レベルでは、サーバー管理者またはAzure Active Directory 管理者アカウントが必要です。On SQL DatabaseSQL Database Standard and Basic Tiers, requires the Server admin or an Azure Active Directory admin account.


A.A. 再利用されたキャッシュエントリのバッチテキストを返すReturning the batch text of cached entries that are reused

次の例は、複数回使用されたすべてのキャッシュ エントリの SQL テキストを返します。The following example returns the SQL text of all cached entries that have been used more than once.

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;  

B.B. キャッシュされたすべてのトリガーのクエリプランを返すReturning query plans for all cached triggers

次の例は、キャッシュされたすべてのトリガーのクエリ プランを返します。The following example returns the query plans of all cached triggers.

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

C.C. プランがコンパイルされた SET オプションを取得するReturning the SET options with which the plan was compiled

次の例は、プランをコンパイルした SET オプションを返します。The following example returns the SET options with which the plan was compiled. プランsql_handleのも返されます。The sql_handle for the plan is also returned. PIVOT 演算子は、属性set_optionssql_handle属性を行ではなく列として出力するために使用されます。The PIVOT operator is used to output the set_options and sql_handle attributes as columns rather than as rows. set_options返される値の詳細については、「 sys. dm_exec_plan_attributes (transact-sql)」を参照してください。For more information about the value returned in set_options, see 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;  

D.D. キャッシュされたすべてのコンパイル済みプランのメモリ内訳を返すReturning the memory breakdown of all cached compiled plans

次の例は、キャッシュにあるすべてのコンパイル済みプランのメモリ内訳を返します。The following example returns a breakdown of the memory used by all compiled plans in the cache.

SELECT plan_handle, ecp.memory_object_address AS CompiledPlan_MemoryObject,   
    omo.memory_object_address, 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';  

参照See Also

動的管理ビューと動的管理関数 (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
実行関連の動的管理ビューおよび関数 (Transact-sql) Execution Related Dynamic Management Views and Functions (Transact-SQL)
dm_exec_query_plan (Transact-sql) sys.dm_exec_query_plan (Transact-SQL)
dm_exec_plan_attributes (Transact-sql) sys.dm_exec_plan_attributes (Transact-SQL)
dm_exec_sql_text (Transact-sql) sys.dm_exec_sql_text (Transact-SQL)
dm_os_memory_objects (Transact-sql) sys.dm_os_memory_objects (Transact-SQL)
dm_os_memory_cache_entries (Transact-sql) sys.dm_os_memory_cache_entries (Transact-SQL)
FROM (Transact-sql)FROM (Transact-SQL)