欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

SqlServer中sys.dm_exec_cached_plans视图使用详解

创建时间:2012年02月09日 15:07  阅读次数:(9622)
分享到:
我们在sqlserver中执行的sql语句,定义的存储过程,触发器,视图等,sqlserver都会生成对应的执行计划并缓存起来,以达到快速查询的目的。那么我们要如何查看到sqlserver为我们缓存的所有的执行计划呢?利用sys.dm_exec_cached_plans视图,我们就可以很方便的查看sqlserver缓存的执行计划,该计划被使用的次数,以及该计划占用的内存长度等,结合sys.dm_exec_sql_text函数,我们还可以快速的查询该执行计划对应的sql语句。

先看一下sys.dm_exec_cached_plans的解释或列说明:
解释:该视图针对Sql Server为了加快查询而缓存的每个查询计划都会返回一行。

列说明:
列名 数据类型 说明
bucketid
int
存储桶 ID。该值指示从 0 到 1 的范围(目录大小)。目录大小是哈希表的大小。
refcounts
int
引用该缓存对象的其他缓存对象数。计数 1 为基数。
usecounts
int
自开始以来使用该缓存对象的次数。
pagesused
int
缓存对象消耗的内存页数。
cacheobjtype
nvarchar(34)
缓存中的对象类型。以下类型之一:
编译计划
可执行计划
分析树
扩展存储过程
memory_object_address
varbinary(8)
计划的内存地址。
objtype
nvarchar(16)
对象的类型。可以是下列类型之一:
Proc--存储过程
Prepared--预定义语句
Adhoc--即席查询
ReplProc--复制筛选过程
Trigger--触发器
View--视图
Default--默认值
UsrTab--用户表
SysTab--系统表
CheckCHECK--约束 Rule规则
plan_handle
varbinary(64)
内存中计划的标识符。该标识符是瞬态的
仅当计划保留在缓存中时,它才保持不变。
该值可以与 sys.dm_exec_query_plan 动态管理函数以及sys.dm_exec_plan_attributes 动态管理函数一同使用。

我们可以从上面的size_in_bytes列找出占用内存量大的执行计划,也可以找出命中率高的执行计划,即usecounts列值大的执行计划。

在这个视图中并没有返回每行执行计划对应的sql文本,我们可以通过下面sql来查询出对应的sql文本:
select p.*,[sqltext].[text]
FROM sys.dm_exec_cached_plans p
OUTER APPLY sys.dm_exec_sql_text(p.plan_handle) sqltext
N <
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:匿名  评论时间:2012-3-1 22:20:58
  • 谢谢,这个网站真不错,学习了。
发表评论:
留言人:
内  容:
请输入问题 21+15=? 的结果(结果是:36)
结  果: