Oracle pctfree 和 pctused

kakaxi9521發表於2022-03-22

       pctfree 這個引數定義了一個塊保留空間的百分比,保留空間是為將來可能發生的更新操作,因為更新可能增大被更新行佔用的空間,如果此時此刻沒有可利用空間,那麼只有發生row migrate(行遷移),從而會降低I/O效能。 換句話說,當一個塊利用率達到 1-pctfree 的時候,oracle 就將該塊從freelist中移除,不再向該塊插入資料。 所以說pctfree 是控制什麼時候將塊從freelist中移除的。

       pctused 這個引數控制一個塊什麼時候被重新啟用來插入資料,例如當一個塊達到1-pctfree 利用率的時候,oracle 停止向該塊插入資料,同時從freelist移除該塊,但是後來發生一些delete 操作,使得該塊的利用率下降,當該塊的利用率降到pctused以下的時候該塊就被重新啟用來插入資料,也就是將該塊重新加入到freelist列表中, 所以說pctused 是控制什麼時候將一個塊重新加入到freelist的。

      例如: 一個塊的pctfree定為10%, pctused 定為40%(oracle 預設設定)。那麼一個塊使用率達到90%的時候,oracle 將該塊從freelist中移除,停止使用該塊來插入資料(可更新)。 後來該塊上發生了delete 操作,使得該塊的利用率下降,當使用率下降到40%以下的時候,oracle 重新將改塊加入freelist, 可用於新的插入。

      注意: 

PCTFREE 和 PCTUSED 的值可以在建立表時指定,也可以在建立表後修改,但是要注意的是,修改後的值,只對修改後的資料操作有影響,對之前的無效。 因為OLTP系統對資料塊的DML操作較為頻繁,所以在OLTP系統中正確配置這兩個屬性可能會對效能有一定提高。

      Oracle11g中,表空間預設使用本地點陣圖自動管理, PCTFREE的預設值為10, 且無法自定義管理PCTUSED屬性,除非將表空間設定為手動管理。


-- Create table

create table TEST

(

  ID   INTEGER,

  NAME VARCHAR2(20)

)

tablespace USERS

  pctfree 10

  initrans 1

  maxtrans 255;


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

相關文章