PerformanceTuning 笔记4 v$librarycache的分析

调优Library Cache的核心思想就是减少解析(parse)

主要手段:
  • 确保用户使用共享的SQL语句
  • 分配足够多的内存防止已经parse的sql语句被唤出。
  • 避免无效对象的产生。比如drop掉原有的snow.t1表,重建snow.t1表。这样再执行该表的查询操作时,看似表名没有变化但是查询需要重新解析。
  • 为内存需求比较大的SQL保留一部分空间。
  • 将常用的一些应用固定在Library cache中不被唤出。
  • 消除大量的匿名PL/SQL代码块
v$librarycache动态性能视图统计了librarycache性能和活动指标。下面的参数常用来诊断当前library cache
  • Gets:(解析阶段)查找该SQL是否已经解析过了
  • GetsHits:查找命中率
  • Pins:(执行阶段)读取或执行的次数
  • Reloads:(解析阶段)执行期间找到的对象无效了,或者被唤出了,需要重新解析。
  • Invalidations:(解析阶段)如果解析后的对象被改变了,需要重新解析。
v$librarycache的查询示例:



解读Library Cache统计信息:

在动态性能视图v$librarycache中reload的值应该接近0,如果该值很高就需要调整了。表示已经解析过的SQL由于某种原因被唤出了。如果该SQL语句再次执行需要重新解析。因此减少reload的次数是关键。

在动态性能视图v$librarycache中invalidations值应该接近0。如果改制较高,可能是因为DDL操作导致表结构改变,之前解析的结果全部失效。

在动态性能视图v$sgastat中的free memory的值应该尽可能低。如果reload值比较高很可能是因为内存太小导致。为shared pool分配足够的内存可以提升效果。

librarycahce的命中率:下图中由于library cache太小导致很多的parse结果被唤出了(reloads 13105)


reloads值应该小于pins的1%。如果reloads大于1,并且free memory值很低通常是因为library cache太小导致。可以通过扩充shared pool的大小来解决。

SQL> select sum(pins) "executions",sum(reloads) "cache misses",sum(reloads)/sum(pins) from v$librarycache;

executions cache misses SUM(RELOADS)/SUM(PINS)
---------- ------------ ----------------------
   4985760        33921             .006803577

注意该值是数据库运行以来的历史累加值,如果想要取得某个阶段的确切至应该使用AWR报告或者statspack。
或者间隔一个时间段分别执行两次select namespace,gethitratio,pinhitratio,reloads,invalidations from v$librarycache;对比各个字段值的变化。

下面的SQL可以显示正在运行中的SQL语句


根据已知信息查询SQL语句的完整信息

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29047826/viewspace-1335794/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29047826/viewspace-1335794/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值