2010-12-07 112 views
7

除了顯而易見之外,任何人都可以解釋多列分區和使用子分區之間的不同之處嗎?哪一個更適合OLTP場景?有關詳細信息,請參見Oracle數據庫管理員指南中的Managing Partitioned Tables and Indexes。在多個列上分區的表的Oracle多列分區與使用子分區

A(啞)的例子是:

CREATE TABLE demo1 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year,instance) 
(
    PARTITION data_2009_inst1 VALUES less than (2009,2) TABLESPACE data_2009, 
    PARTITION data_2009_inst2 VALUES less than (2009,3) TABLESPACE data_2009, 
    PARTITION data_2010_inst1 VALUES less than (2010,2) TABLESPACE data_2010, 
    PARTITION data_2010_inst2 VALUES less than (2010,3) TABLESPACE data_2010, 
    PARTITION data_2011_inst1 VALUES less than (2011,2) TABLESPACE data_2011, 
    PARTITION data_2011_inst2 VALUES less than (2011,3) TABLESPACE data_2011 
); 

類似地,示例的subpartitioned表的是:

CREATE TABLE demo2 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year) 
SUBPARTITION BY LIST (instance) /* Cannot subpartition by range in 10gR2 */ 
    SUBPARTITION template 
    (
     SUBPARTITION i1 VALUES (1), 
     SUBPARTITION i2 VALUES (2), 
     SUBPARTITION ix VALUES (DEFAULT) 
    ) 
(
    PARTITION data_2009 VALUES less than (2010) TABLESPACE data_2009, 
    PARTITION data_2010 VALUES less than (2011) TABLESPACE data_2010, 
    PARTITION data_2011 VALUES less than (2012) TABLESPACE data_2011 
); 

現在是什麼這些表之間的差異?他們不是「邏輯上」嗎?我知道將分區添加到demo2要容易得多,因爲您需要在demo1上拆分分區,以便隨着時間的推移獲取更多分區。 OLTP場景中哪個更好?

在附註中,我在INSTANCE編號上進行分區的原因與Oracle RAC有關。我試圖創建一個「實例關聯」來阻止「熱塊」放慢數據庫,因爲這些需要通過RAC節點之間的互連發送。 (我們經驗證明,這對我們的測試確實有所幫助)。

回答

2

你的情況可能沒有什麼區別,但是通常子分區允許你以2種不同的方式進行分區,比如範圍散列,範圍列表。您的子分區示例是範圍列表,但等效於單級範圍分區。但是,你不能使用單級,如果你的子分區是這樣的例子從DOC你鏈接:

子分區的
ALTER TABLE quarterly_regional_sales 
    ADD PARTITION q1_2000 VALUES LESS THAN (TO_DATE('1-APR-2000','DD-MON-YYYY')) 
     STORAGE (INITIAL 20K NEXT 20K) TABLESPACE ts3 NOLOGGING 
     (
      SUBPARTITION q1_2000_northwest VALUES ('OR', 'WA'), 
      SUBPARTITION q1_2000_southwest VALUES ('AZ', 'UT', 'NM'), 
      SUBPARTITION q1_2000_northeast VALUES ('NY', 'VM', 'NJ'), 
      SUBPARTITION q1_2000_southeast VALUES ('FL', 'GA'), 
      SUBPARTITION q1_2000_northcentral VALUES ('SD', 'WI'), 
      SUBPARTITION q1_2000_southcentral VALUES ('OK', 'TX') 
     ); 
0

一個優點是它們允許子的個體精細管理-partitions。例如,在數據歸檔表中,可以說不僅保留日期不同,還有其他值。

使用您的示例,或許您需要在7年內保持value instance = 1的數據,但實例= 2的數據可以在4年後丟棄。子分區將允許您刪除包含instance = 2的數據的子分區,而與其他值無關。