(mywes)


他们彼此深信,是瞬间迸发的热情让他们相遇。这样的确定是美丽的,但变幻无常更为美丽

留言簿

公告

最新日志

最新评论

搜索

登陆

友情连接

统计

2006/9/7 15:15:00
KEEP POOL和CACHE属性的区别 (转贴)

我们知道可以设置表的属性CACHE将表数据放入数据缓存中,也可以设置表将其放入KEEP缓冲池,这两者的区别如下:


BUFFER POOL包括DEFAULT、KEEP、RECYCLE三个POOL,其大小分别对应三个参数:
DB_CACHE_SIZE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SZIE,这三个POOL相互独立,没有包含的关系。
语法如下:
create/alter table ...... storage(buffer_pool keep);
当表被读入的时候,放入keep pool,keep pool 中的数据会尽量长时间的保留,
保留的时间长短依据keep pool的负载而定。

create/alter table ...... cache;
当全表扫描时,放入default pool 的LRU热端(如无cache,则放入LRU冷端,很快就会
被age out),适合频繁使用的小表,如果有很多表要cache,那应该把表放如keep pool.

全表扫描时,数据是放入default pool的LRU冷端,所以可能很快就会被从内存中age out,
对一些频繁使用的小表来说效率就比较底了,所以使用cache 子句,在全表扫描时,让oracle
把数据放入LRU的热端,避免很快被age out,如果有太多的表cache,LRU链表会很拥挤,LRU机
制也会受影响,所以该把表放入keep pool,而且cache子句也不适合大表,因为有可能这个大
表会占据整个LRU链表。

对于放入KEEP POOL中的表数据,要么全表放入,要么全表都out,不会只放入一部分数据。

当BUFFER_POOL和CACHE同时使用时,KEEP比NOCACHE有优先权。
BUFFER_POOL用来指定存贮的缓冲池,而CACHE/NOCACHE指定存储的方式。


附注:对于8i,需要设置参数buffer_pool_keep,还要修改 db_block_lru_latches,
该参数默认是1,无法使用buffer_pool_keep。该参数应该比2*3*CPU数量少,但是要
大于 1,才能使用buffer_pool_keep。buffer_pool_keep从db_block_buffers中分配,
因此也要小于db_block_buffers。

发表评论:

    昵称:
    密码:
    主页:
    标题: