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%;
不知是否说明白.