KEEP POOL和CACHE属性的区别

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

[@more@]

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。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3898/viewspace-830792/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/3898/viewspace-830792/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值