SQL优化之监控篇:查看缓存的执行计划的性能统计信息

 

上篇文章讲到,捕获正在运行的sql,以及查看实际执行计划和运行时信息,而本文要讲的是,如何抓取到之前一个时间段内,sql的运行时信息。

因为有问题的sql可能已经运行完了(比如,有个sql从早上6点开始运行,到7点运行结束,而现在已经是早上10点了),没办法获取到这个sql,而sql server会把之前运行过的sql的信息记录下来,所以,我们可以从缓存中找到这些历史的sql。

 

下面的代码能查看缓存的查询计划(各类语句:select,update,delete,insert等)的性能统计信息,包括:总的逻辑读,总的物理读、 总的逻辑写、总的占用时间、总的cpu时间、以及执行次数,以及sql的handle(客户用来获取到实际的sql和执行计划)。

--从语句级别查看统计信息
select rr.text,                      --执行的语句

       --此计划自编译后在执行期间所执行的逻辑读取总次数
       r.total_logical_reads,
       
       --此计划自编译后在执行期间所执行的物理读取总次数        
       r.total_physical_reads,     
       
       --此计划自编译后在执行期间所执行的逻辑写入总次数       
       r.total_logical_writes,     
       
       --完成此计划的执行所占用的总时间,单位是微秒  
       r.total_elapsed_time,
       
       --此计划自编译以来执行所用的CPU时间总量,单位是微秒  
       r.total_worker_time,
       
       --计划自上次编译以来所执行的次数
       r.execution_count,
       
       --表示包含查询的批查询或存储过程的标记
       r.sql_handle,
       
       --对查询计算的二进制哈希值,用于标识具有类似逻辑的查询
       r.query_hash,
       
       --表示包含查询的编译计划的标记
       r.plan_handle,
       
       --对查询执行计划计算的二进制哈希值,用于标识类似的查询执行计划
       r.query_plan_hash,
       
       --用于在重新编译后区分不同计划实例的序列号
       --查询语句中使用option(recompile)提示后会有显示
       r.plan_generation_num
from sys.dm_exec_query_stats r
cross apply sys.dm_exec_sql_text(r.sql_handle) rr

 

我们还可以通过查询计划的hash值,查看聚合的性能统计信息 

--从查询的哈希值或查询计划的哈希值级别,查看统计信息
select r.query_hash,    --语句有差异,但是语句对应的hash值一样
       
       COUNT(rr.text),  --查询次数
       
       SUM(r.total_logical_reads),  --总的逻辑读次数
       SUM(r.total_logical_writes)  --总的逻辑写次数
from sys.dm_exec_query_stats r
cross apply sys.dm_exec_sql_text(r.sql_handle) rr
GROUP BY R.query_hash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值