固定快取物件

foreverlee發表於2005-09-15

嘗試在記憶體中固定經常使用的物件,包括表,儲存過程等。

[@more@]

一 固定頻繁使用的表
如果我們要固定表,那麼可以在建立表的時候或者修改表屬性時使用CACHE關鍵字,將表放置到Buffer Cache的LRU列表的MRU端。通常我們需要對於較小的但是頻繁使用的表進行這種操作。

ALTER TABLE TABLE_NAME CACHE;

我們也可以將需要頻繁使用的表放置到另外一個獨立的Buffer Cache中,比如KEEP池。這種操作可以使這些表的資料不至於很快被清除出Default Buffer Cache。

ALTER TABLE STORAGE (BUFFER_POOL KEEP); ALTER INDEX
STORAGE (BUFFER_POOL KEEP);

比如:

ALTER TABLE TEST1 STORAGE (BUFFER_POOL KEEP);


二 固定頻繁使用的過程函式
檢索需要在共享池中要求大於100K連續空間的物件:

select *
from v$db_object_cache
where sharable_mem > 100000
and type in ('PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'FUNCTION');

考察返回的結果,確認是否需要pin到共享池中,返回結果中的KEPT欄位如果是YES,那麼表示該物件已經固定在了共享池中,為NO,則表示還沒有固定。

如果需要固定,使用下面的語句:

exec dbms_shared_pool.keep('SYS.STANDARD');

資料庫預設安裝的時候沒有建立dbms_shared_pool包,所以需要先建立該包。

cd $ORACLE_HOME/rdbms/admin

sqlplus “/ as sysdba”

@dbmspool.sql

三 絕緣很少使用的表

SGA記憶體空間很寶貴,所以我們通常將很少使用的表排除出SGA
SQL> ALTER TABLE TEST2 STORAGE(BUFFER_POOL RECYCLE);

Table altered.


相關知識:
SGA中Database Buffer Cache 由三個部分組成
DB_CACHE_SIZE 儲存普通資料庫物件
DB_KEEP_CACHE_SIZE 儲存經常使用的資料庫物件 (經常使用的小表)
DB_RECYCLE_CACHE_SIZE 儲存很少使用的資料庫物件 (很少使用的大表)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/76065/viewspace-806557/,如需轉載,請註明出處,否則將追究法律責任。

相關文章