调整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:对于随机访问的大段可以放在这个缓冲区池,因为大的数据段会很快
老化被踢出去,导致缓冲区的频繁刷新输出,所以需要将随机访问的大段放置这个缓冲池中;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26465805/viewspace-713122/
,如需转载,请注明出处,否则将追究法律责任。