关于Multiple Buffer Pools的一些疑问

Oracle7.3之后,oracle允许在段创建的时候指定buffer pool,分别可以指定DEFAULT,KEEP,RECYCLE,如果不指定,默认为DEFAULT
我们可以通过下面的方法修改表或者索引的buffer pool:

1、查看表所对应的buffer
可以用两种方法查看:
set long 10000
select dbms_metadata.get_ddl('TABLE','&tname') from dual;

select table_name ,buffer_pool from dba_tables where table_name ='TEST';

2、查看可以被放入keep池的表
小表经常被访问,需要设置DB_KEEP_CACHE_SIZE,独立于db_cache_size
SELECT o.owner, object_name, object_type, COUNT(1) buffers
FROM SYS.x$bh, dba_objects o
WHERE tch > 10
AND lru_flag = 8
AND obj = o.object_id
AND o.owner not in ('SYSTEM','SYS')
GROUP BY o.owner, object_name, object_type
ORDER BY buffers;

----修改对象定义
alter table t storage(buffer_pool keep);

alter index test.BM_IDX_BT storage(buffer_pool KEEP);

3、查看可以被放入recycle池的表
用于不经常访问的大segment,不希望其保留在内存中,需要设置DB_RECYCLE_CACHE_SIZE,独立于db_cache_size
Col object_name format a30
Col object_type format a20
SELECT o.owner, object_name, object_type, COUNT(1) buffers
FROM SYS.x$bh, dba_objects o
WHERE (tch = 1 OR (tch = 0 AND lru_flag < 8))
AND obj = o. object_id
AND o.owner not in ('SYSTEM','SYS')
GROUP BY o.owner, object_name, object_type
ORDER BY buffers;

----修改对象定义
alter table t storage(buffer_pool recycle);

alter index test.BM_IDX_BT storage(buffer_pool RECYCLE);

有三点疑问:

a、如果keep池够大,是否可以将频繁使用的大表都放进去?有没有一个用于分辨的方法。
b、keep、default、recycle池的算法是否一样,比如如果recycle够大,是不是也可以当keep池用。
c、如果我把某个表使用keep池,但是我却不给keep池分配内存,结果会如何。

[ 本帖最后由 foxmile 于 2008-6-24 10:24 编辑 ]

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

转载于:http://blog.itpub.net/79499/viewspace-417664/

你可能感兴趣的:(关于Multiple Buffer Pools的一些疑问)