sys.dm_exec_cached_plans (Transact-SQL)
针对 SQL Server 为了加快查询执行而缓存的每个查询计划返回一行。可以用此动态管理视图来查找缓存的查询计划、缓存的查询文本、缓存计划占用的内存量,以及重新使用缓存计划的计数。
注意 |
---|
对于查询计划而言,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) |
缓存中的对象类型。该值可以是下列值之一:
|
objtype |
nvarchar(16) |
对象的类型。该值可以是下列值之一:
值说明
Proc存储过程
Prepared预定义语句
Adhoc即席查询 1
ReplProc复制筛选过程
Trigger触发器
View视图
Default默认值
UsrTab用户表
SysTab系统表
CheckCHECK 约束
Rule规则
|
plan_handle |
varbinary(64) |
内存中计划的标识符。该标识符是瞬态的,仅当计划保留在缓存中时,它才保持不变。此值可以和以下动态管理函数一起使用: |
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。
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