資料庫表--heap organized table

jelephant發表於2013-12-08
增加資料時,會使用段中找到的第一個能放下此資料的自由空間。刪除資料後,允許以後的insert、update重用這部分空間。可以將堆組織表看做是一個很大的無序行集合。

如下方法可以瞭解給定表的create table語句中主要有哪些選項:
JEL@JEL >create table test ( x int primary key,y date,z clob);
JEL@JEL >select dbms_metadata.get_ddl('TABLE','TEST') from dual;

DBMS_METADATA.GET_DDL('TABLE','TEST')
--------------------------------------------------------------------------------

  CREATE TABLE "JEL"."TEST"
   (    "X" NUMBER(*,0),
        "Y" DATE,
        "Z" CLOB,
         PRIMARY KEY ("X")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "SYSTEM"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

DBMS_METADATA.GET_DDL('TABLE','TEST')
--------------------------------------------------------------------------------
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "SYSTEM"
 LOB ("Z") STORE AS (
  TABLESPACE "SYSTEM" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10
  NOCACHE LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))


freelists--僅適用於MSSM。每個表都會在一個freelist上管理堆中分配的塊,一個表可以有多個freelist。如果有多個使用者併發對錶執行插入操作,配置多個freelist會改善效能,但要以額外的儲存空間為代價。

pctfree--ASSM和MSSM都適用。這個引數用於控制能否將一行增加到一個塊上和控制因後續更新導致的行遷移

pctused--僅適用於MSSM。度量一個塊什麼時候才能插入行。如果塊中已經用的空間小於pctused,就可以插入行

initrans--ASSM和MSSM都適用。為塊初始分配的事物槽。設定太低,肯能導致多個使用者訪問一個塊的併發問題。

注意,LOB段中的LOB資料並不適用pctfree/pctused引數設定。這些lob塊總會填入資料,直到達到最大容量,而且僅當完全為空時才返回freelist


堆表具有的唯一優點是 插入資料不需要採取任何措施,只需要順其自然地安裝插入的順序儲存,減少了插入大量資料的代價.

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

相關文章