忘了说的:ORACLE是9.2+AIX433.

解决方案 »

  1.   

    为了提供DB_BUFFER的命中率,首先可以考虑增大DB_BLOCK_BUFFER的大小,但是你增大DB_BLOCK_BUFFER后,发现并不是很有效,此时应该考虑:
    1 把常用的但是不是很大的表(一般来说,像代码表),cashe在BUFFER中
    2 使用multiplu buffer pool。oracle 8i可以配置三种buffer pool.keep,recycle,default.
    在init<sid>.ora中配置
    DB_BLOCK_BUFFERS = 20000
    DB_BLOCK_LRU_LATCHES = 6
    BUFFER_POOL_KEEP=(BUFFERS:14000,LRU_LATCHES:1)
    BUFFER_POOL_RECYCLE=(BUFFERS:2000,LRU_LATCHES:3)
    方法具体,参考online help.
      

  2.   

    可以查v$db_cache_advice,是ORACLE对buffer cache的估计先show parameter db_cache_advice
    看看是不是ON.如果不是ON,那么alter system set db_cache_advice=true;
    等系统多执行一段时间再做下面的操作select size_for_estimate,estd_physical_reads
     from v$db_cache_advice;含义是,假设buffer cache的大小是size_for_estimate(M)时,bffer cache需要的物理读的次数.(estd_physical_reads)
    在这个表中可以看到estd_physical_reads的变化,当开始趋于平稳时,那个size_for_estimate就是ORACLE建议的db cache size.