ITPub博客

首页 > 应用开发 > IT综合 > KEEP POOL和CACHE属性的区别

KEEP POOL和CACHE属性的区别

原创 IT综合 作者:yaanzy 时间:2006-04-27 11:41:03 0 删除 编辑

我们知道可以设置表的属性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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    108
  • 访问量
    761534