调整DB_Cache大小,设置合适的db_cache大小可以提高缓冲区的命中率,提供用户数据的响应时间。 计算命中率前,要知道几个缓冲值 SQL> select name,value 2 from v$sysstat 3 where name in ('db block gets from cache', 4 'consistent gets from cache', 5 'physical reads cache'); NAME VALUE ---------------------------------------------------------------- ---------- db block gets from cache 2354 consistent gets from cache 82225 physical reads cache 6007 db block gets:DB块获——db_cache中存在被更改后最新版本的数据(数据在其他用户访问前已经提交了) consistent gets:一致获取——db_cache中存在的脏数据,这样的数据不会被访问,此时用户使用回滚段中的记录 physical reads:物理读——db_cache中没有用户要访问的数据,需要从磁盘中读取该数据块 逻辑读 = db block gets from cache + consistent gets from cache 物理读 = physical reads cache 命中律=1-物理读/逻辑读 注意:命中律并不能说明此时的数据库性能就一定很好,还需要具体分析等待事件。如果此时的 命中率很高,但是系统存在大量的等待事件,如果数据文件离散度等,可能存在大量的全表扫描,就要进一步分析 等待事件和相关的SQL语句。 可以在业务高峰期阶段查询命中率,反复调试,知道命中率满足要求 alter system set db_cache=100M; 如果用户访问多个大表,这些表 只有一部分保存在lib_cache中,lib_cache中的大表数据的存在会降低 DB_Cache的命中率,而如果这样的大表不是用户频繁访问的对象,就可以放进recycle_pool来存放,这样 的数据库对象会被覆盖。 对于既没有存放在keep_pool,recycle_pool中的对象,默认放在defautl_pool 缓存的表的尺寸不要超过缓冲区的10%。 db_buffer_cache 1,default pool 2,keep pool 3,recycle pool:对于随机访问的大段可以放在这个缓冲区池,因为大的数据段会很快 老化被踢出去,导致缓冲区的频繁刷新输出,所以需要将随机访问的大段放置这个缓冲池中; |
|