3.4 Buffer cache的内存结构
从8.0以后,oracle提供了三种类型的buffer cache,分别是default、keep、recyle。keep和recycle是可选的,default必须存在。8i以前使用db_block_buffer设置default、buffer_pool_keep设置keep、buffer_pool_recycle设置recyle。而8i以后使用db_cache_size设置default、db_keep_cache_size设置keep、db_recycle_cache_size设置recycle。10g不能自动设置db_keep_cache_size和db_recycle_cache_size,必须手工设置。
8i以前,这三种buffer cache是独立指定的,互不制约。而8i以后,这三种buffer cache是有相互制约关系的。如果指定了keep和recycle的buffer cache,则default类型的buffer cache的大小就是db_cache_size - buffer_pool_keep - buffer_pool_recycle。
通常将经常访问的对象放入keep类型的buffer cache里,而将不常访问的大表放入recycle(默认是CR块)类型的buffer cache里。其它没有指定buffer cache类型的对象都将进入default类型的buffer cache里。
备注:
n Keep pool 、Recycle pool和default pool采用的LRU算法是不同的,目前大多数资料所讲的LRU算法及关于buffer cache的话题,主要针对的是default pool。有些描述中的buffer cache即是指的 buffer cache中的 default pool,本书中同样如此。关于keep pool 和recycle pool 的算法资料较少。
我们先来看下面这些图。这副图从逻辑上说明了整个buffer cache的结构是怎么样的。这副图的右上角列出了三个名词:hash bucket、buffer header和hash chain。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/347643/viewspace-619992/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/347643/viewspace-619992/