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/,如需转载,请注明出处,否则将追究法律责任。