sys.dm_exec_cached_plans

更新日期: 2006 年 12 月 12 日

针对 SQL Server 为了加快查询执行而缓存的每个查询计划返回一行。 可以用此动态管理视图来查找缓存的查询计划、缓存的查询文本、缓存计划占用的内存量,以及重新使用缓存计划的计数。

ms187404.note(zh-cn,SQL.90).gif注意:
对于查询计划而言,sys.dm_exec_cached_plans 动态管理视图映射到 SQL Server 2000 中的 syscacheobjects 系统表。

列名

数据类型

说明

bucketid

int

其中条目已缓存的哈希存储桶的 ID。 此值指示从 0 到特定缓存类型的哈希表大小之间的范围。

对于 SQL 计划和对象计划缓存而言,在 32 位系统上哈希表大小可达 10007,在 64 位系统上哈希表大小可达 40009。 对于绑定树缓存而言,在 32 位系统上哈希表大小可达 1009,在 64 位系统上哈希表大小可达 4001。 对于扩展存储过程缓存而言,在 32 位和 64 位系统上,哈希表大小可达 127。 有关缓存类型和哈希表的详细信息,请参阅 sys.dm_os_memory_cache_hash_tables

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_entries 一起使用,以获得缓存条目的开销。

cacheobjtype

nvarchar(34)

缓存中的对象类型。 该值可以是下列值之一:

  • Compiled Plan
  • Parse Tree
  • Extended Proc
  • CLR Compiled Func
  • CLR Compiled Proc

objtype

nvarchar(16)

对象的类型。 该值可以是下列值之一:

说明

Proc存储过程

Prepared预定义语句

Adhoc即席查询 1

ReplProc复制筛选过程

Trigger触发器

View视图

Default默认值

UsrTab用户表

SysTab系统表

CheckCHECK 约束

Rule规则

plan_handle

varbinary(64)

内存中计划的标识符。 该标识符是瞬态的,仅当计划保留在缓存中时,它才保持不变。 此值可以和以下动态管理函数一起使用:

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes

1 使用 osqlsqlcmd 而不是作为远程过程调用引用作为语言事件提交的 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_optionssql_handle 属性输出为列而非行。 有关 set_options 中返回的值的详细信息,请参阅 sys.dm_exec_plan_attributes

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

请参阅

参考

动态管理视图和函数
与执行有关的动态管理视图和函数
sys.dm_exec_query_plan
sys.dm_exec_plan_attributes
sys.dm_exec_sql_text
sys.dm_os_memory_objects
sys.dm_os_memory_cache_entries

其他资源

使用 APPLY

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

更改的内容:
  • 添加了“示例”部分。
  • 修改了 bucketidrefcountsmemory_object_addressobjtypecacheobjtype 列的定义。

2005 年 12 月 5 日

更改的内容:
  • 已将 Pagesused 列名改为 size_in_bytes
  • 移动了 memory_object_address 列,使其出现在 size_in_bytes 列之后。