create table中的buffer pool 設定 KEEP 及CACHE 引數的聯絡及區別

tolywang發表於2010-08-18


CREATE TABLESPACE LOG_DATA DATAFILE
  '/ocfs_data/mxdell/log_data01.dbf' SIZE 4001M AUTOEXTEND OFF,
  '/ocfs_ctrl_redo/mxdell/log_data2.dbf' SIZE 2048064K AUTOEXTEND OFF
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 20M
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO    -- ASSM
FLASHBACK ON;


----------------------


CREATE TABLE DFMS.EDIBTO850_MAIN
(
  CONTROLNUMBER     VARCHAR2(40 BYTE)  NOT NULL,
  ISA06             VARCHAR2(50 BYTE),
  CREATE_TIME       DATE        DEFAULT sysdate
)
TABLESPACE LOG_DATA
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          10M
            NEXT             20M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING
NOCOMPRESS
NOCACHE   
NOPARALLEL
MONITORING;

 

解釋:

-- create ablespace 中的flashback on 及 flashback off .

對於crate tablesapce中的FLASHBACK ON,預設情況下建立tablespace就是
啟動flashback, 指定將tablespace放在FLASHBACK模式下,Oracle會為這個
tablespace儲存閃回日誌資料,那麼在做FLASHBACK DATABASE 的時候,能夠
應用到此表空間上,如果我們不設定flashback模式,預設是FLASHBACK ON. 

指定FLASHBACK OFF將使對應的tablespace不在FLASHBACK模式下,Oracle將
不會為它儲存任何的閃回日誌資料,在做FLASHBACK DATABASE之前,我們必
須先將這個表空間中的資料檔案offline或者drop他們,或者還有一種方式
就是,你可以將整個tablespace offline, 在以上任何一種情況下,資料庫
不刪除存在的閃回日誌 。

 

-- create table 

log_data表空間啟用了ASSM, 那麼建表的時候,沒有明確指定pctused, 預設
pctused是0,pctfree預設還是10,INITRANS 1, MAXTRANS 255 表示表的資料
塊頭部最小和最大的ITL槽(Interested Transaction List), 一般為了最佳化ITL,
可以設定INITRANS為3或4即可(足夠)。關於ITL可以參考下面的連結。PCTINCREASE
在autoallocate下起作用,表示下一個extent大小為前一個的(1+pctincrease%)倍 ,
在uniform. size設定的tablespace下不起作用,Oracle 建議使用PCTINCREASE
的零設定 .

http://space.itpub.net/35489/viewspace-671133 

 


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);

default -- 普通的buffer cache .
recycle -- 通常將偶爾訪問的大表放入recycle pool中,這樣做是為了防止它的一次訪問
就將那些頻繁使用且應該長時間留在buffer cache中的物件清除出記憶體。

keep -- 當表被讀入的時候,放入keep pool,keep pool 中的資料會盡量長時間的保留,
保留的時間長短依據keep pool的負載而定。對於放入KEEP POOL中的表資料,要麼全表放
入,要麼全表都out,不會只放入一部分資料。通常將經常訪問的物件放入keep pool中。

 

 

KEEP POOL 及 CACHE 引數的聯絡及區別 ----- 

create/alter table ...... cache;
設定表為cache時,當全表掃描時,將物件資料放入default pool的LRU熱端(備註:
如果是nocache,則放入LRU冷端,很快就會被age out),cache適合頻繁使用的小
表, 如果有太多的表cache, LRU連結串列會很擁擠,LRU機制也會受影響,所以該把表
放入keep pool,而且cache子句也不適合大表,因為有可能這個大表會佔據整個
LRU連結串列。 

當BUFFER_POOL和CACHE同時使用時,KEEP比NOCACHE有優先權。BUFFER_POOL用來指
定存貯的緩衝池,而CACHE/NOCACHE指定儲存的方式。建表時候不註明的話,NOCACHE
是預設值。


CACHE
For data that is accessed frequently, this clause indicates that the blocks
retrieved for this table are placed at the most recently used end of the
least recently used (LRU) list in the buffer cache when a full table scan
is performed. This attribute is useful for small lookup tables.

NOCACHE 
For data that is not accessed frequently, this clause indicates that the
blocks retrieved for this table are placed at the least recently used end
of the LRU list in the buffer cache when a full table scan is performed.
NOCACHE is the default for LOB storage. 

 

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

相關文章