yesn 发表于 2018-9-15 06:05:10

oracle libary cache 命中率

  原文出处
  SQL> desc v$librarycache
  Name                                    Null?    Type
  ----------------------------------------- -------- ----------------------------
  NAMESPACE                                          VARCHAR2(15)
  GETS                                             NUMBER可以理解为某个object解析的时候查找的次数(解析阶段)
  GETHITS                                          NUMBER get命中次数
  GETHITRATIO                                        NUMBER 这个值等于gethits/gets
  PINS                                             NUMBER   某个object 解析过后被执行的次数(发生在执行阶段)
  PINHITS                                          NUMBERpin命中次数
  PINHITRATIO                                        NUMBER这个值等于pinhits/pins

  >  INVALIDATIONS                                    NUMBER 某个对象无效,通常由于对象定义被更改,需要从新解析
  DLM_LOCK_REQUESTS                                  NUMBER
  DLM_PIN_REQUESTS                                 NUMBER
  DLM_PIN_RELEASES                                 NUMBER
  DLM_INVALIDATION_REQUESTS                        NUMBER
  DLM_INVALIDATIONS                                  NUMBER
  查看总的library cache pinhitratio 应该大于90%,最理想大于95%
  SQL> select sum(pinhits)/sum(pins) pinhitratio from v$librarycache;
  PINHITRATIO
  -----------
  .916570607

  SQL> select sum(pins)/(sum(pins)+sum(reloads))>  RELOADHITRATIO
  --------------
  .997046909
  查看reloadhitratio 应该小于1%
  SQL> select sum(reloads)/sum(pins) from v$librarycache;
  SUM(RELOADS)/SUM(PINS)
  ----------------------
  .002959248
  查看各个类型的library cache ratio, 看pinhitratio 这一行
  SQL> select namespace,pins pinhits ,pinhitratio from v$librarycache;
  NAMESPACE          PINHITS PINHITRATIO
  --------------- ---------- -----------
  SQL AREA            136089.907935248
  TABLE/PROCEDURE      54863.917230192
  BODY               11053.988057541
  TRIGGER               2064.994670543
  INDEX                  239.665271967
  CLUSTER               4603.996958505
  OBJECT                   0         1
  PIPE                     0         1
  JAVA SOURCE            0         1
  JAVA RESOURCE            0         1
  JAVA DATA                0         1
  11 rows selected.
  查看当前 library cache 的大小
  SQL> select sum(sharable_mem) from v$db_object_cache;
  SUM(SHARABLE_MEM)
  -----------------
  20775388
  查看剩余的 shared pool
  SQL> select * from v$sgastat where name='free memory' and pool='shared pool';
  POOL         NAME                            BYTES
  ------------ -------------------------- ----------
  shared poolfree memory                  86134880
  ORACLE调优专家所推荐的长期运行的数据库的 library cache hitratio 最好应该在95%以上,sum(reloads)与sum(pins) 的比值应该小于 1%,如果pinhitratio 小于90%,或者reload ratio 大于1% ,而且shared pool 的free memory 很小或者为0,那么可以适当增加shared_pool的大小,检查应用程序代码效率,比如是否使用了绑定变量等等.
  这里可以看出pinhitratio命中率小于95%,但是有低于1%的重载率,而且看到剩余的shared pool 有80多M,说明我的shared pool完全够用。

页: [1]
查看完整版本: oracle libary cache 命中率