首页 > 应用开发 > IT综合 > 关于BUFFER POOL的一些总结
BUFFER POOL有三个池组成:
BUFFER POOL 、KEEP、RECYCLE组成。这三个池各有自己的算法来更新存放池中的数据。
BUFFER POOL使用的是LRU算法来存放数据块,数据块会根据访问的频率的多
少来决定在这个池中存放的时间。
KEEP使用的一直存放的算法,将数据一直存放在这个池中,数据不会被清除出池,但是需要说的是所要存放的数据块应该少于池本身的大小。而且存放的数据块的内容一般是需要重复访问的数据块。
RECYCLE是存放不经常使用的数据块,也就是说,这个池的算法是不保留数据块,当池本身的空间使用完后就会将数据块清除出去。一般存放大表的数据块,而这个大表是不经常使用的,或者是一个全表扫描。这里需要注意的是这个池设计的大小应该是能够保证在事务完成前所需要的数据块还在内存中。
使用这三个池,我个人认为,应该在体系结构设计阶段就应该考虑这个问题,也就是说,在建立表的时候就应该考虑这个问题。之所以使用其他两个池来缓存表中的数据,目的是为了减少BUFFER POOL的老化,KEEP的使用是比较好理解的,就是在内存中缓存某个经常使用的表的数据。当然也是可以在DEFAULT池中CACHE。
RECYCLE的使用就是不是很好理解了。其实对于一个很大的表,对这个表的访问是随机的,而且是不频繁的,或者对这个表有全表扫描的操作,就可以使用这个池了,因为如果使用在DEFAULT中,势必造成DEFAULT其他数据的老化。这样就增加了系统的负担。
其中,很大的表和不频繁的访问是必要条件。但是这个池的使用也是一个双刃剑,因为假如这个池的大小设计的不合理的话,就是说如果太小,在事务的处理的过程中,所前期读入到内存中的数据块在事务未完成,而且还需要再次使用的时候被老化了,就需要再次从磁盘上读出此块。这样就会造成性能问题。
关于CACHE的使用
这个设置就是将所需要缓存的表的数据块放置在LRU的最前端,之所以这样做的目的是为了如对一个大的表进行全表扫描的话,就会将所读入的数据块放入DEFAULT中,就会造成这些数据块的老化。这个主要是针对DEFAULT。对于Oracle推荐使用KEEP,因为KEEP Oracle说是更有效率。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/222350/viewspace-908030/ ,如需转载,请注明出处,否则将追究法律责任。