当前位置: 代码迷 >> Oracle管理 >> 关于命中率低的有关问题,大神快来解答
  详细解决方案

关于命中率低的有关问题,大神快来解答

热度:189   发布时间:2016-04-24 04:11:15.0
关于命中率低的问题,大神快来解答

 select * from v$librarycache;

NAMESPACE      GETS    GETHITS  GETHITRATIO       PINS    PINHITS            PINHITRATIO     RELOADS   INVALIDATIONS 
--------------- ---------- ---------- ----------- ---------- ---------- ----------- ---------- ------------- ----------------- ---------------- ---------------- --------------
SQL AREA            271467     149651 0.551267741  157045019  155818514   0.992190105     950507         94537


SQL> select * from v$sgastat t where t.NAME like '%free%memory%';

POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  free memory                  17029080
large pool   free memory                  15701144
java pool    free memory                  26861312


问题来了,
为什么我的shared pool free memory 这么多,但是GETHITRATIO 值这么低?
------解决思路----------------------
命中,表示你执行的SQL语句在SQlAREA中找到了,不用发生硬解析生成执行计划。
如果你执行的SQL都一样,肯定在shared pool中能找到,命中率肯定很高。
舅果你执行的SQL都不一样,也没有采用绑定变量,在shared pool中肯定找不到,也就是说没有命中,命中率肯定低呀。
命中率高低与你shared pool free memory多少没有直接关系。
命中率高表示你的 应用 sql语句,解析了一次,执行了很多次。
命中率低表示你的 应用 sql语句,解些了一次,可能就执行了一次或执行次数少,表示你的应用写的不好,硬解析太多,会过多消耗CPU和row cache争用。

命中率= (命中次数/总次数)*100%; 

不知是否说明白.
  相关解决方案