關於Multiple Buffer Pools的一些疑問

foxmile發表於2008-06-24
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章