2010-12-07 10 views
7

Abgesehen von den offensichtlichen, kann jemand erklären, was ist das Unterschied zwischen mehrspaltigen Partitionierung und mit einer Unterpartition? Und welches ist besser für ein OLTP-Szenario? Ausführliche Informationen finden Sie im Oracle Database Administrator-Handbuch unter Managing Partitioned Tables and Indexes.Oracle multicolumn Partitionierung vs mit einer Unterpartition

A (stumm) Beispiel einer Tabelle auf mehrere Spalten aufgeteilt ist:

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

Ähnlich Beispiel einer teilpartitionierte Tabelle ist:

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

Nun, was ist der Unterschied zwischen diesen Tabellen ist? Sind sie nicht "logisch" gleich? Ich weiß, es ist viel einfacher, Partitionen zu demo2 hinzuzufügen, da Sie Partitionen auf demo1 aufteilen müssen, um mehr Partitionen zu erhalten, wenn die Zeit vergeht. Welche Option ist in einem OLTP-Szenario besser?

Nebenbei bemerkt, der Grund, warum ich Partitionierung auf der INSTANZ Nummer hat mit Oracle RAC zu tun. Ich versuche, eine "Instanzaffinität" zu erstellen, um zu verhindern, dass "Hotblock" die Datenbank verlangsamt, da diese über die Verbindung zwischen den RAC-Knoten gesendet werden muss. (Wir haben empirisch bewiesen, dass dies bei unseren Tests einen Unterschied macht).

Antwort

2

Es gibt wahrscheinlich keinen Unterschied in Ihrem Fall, aber im Allgemeinen ermöglicht die Unterpartitionierung die Partitionierung auf 2 verschiedene Arten, wie zB Range-Hash, Range-List. Das Beispiel einer Unterpartition ist eine Bereichsliste, entspricht jedoch der Bereichspartitionierung auf einer Ebene. Allerdings konnte man keine einzige Ebene verwenden, wenn die Unterteilungs wie in diesem Beispiel ist aus dem doc Sie verknüpft:

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

Ein Vorteil von Unterteilungen ist, dass sie individuelle feinkörnige Verwaltung des Teils ermöglichen -Partitionen. Zum Beispiel in einer Datenarchivtabelle, sagen wir, es gibt unterschiedliche Aufbewahrungsanforderungen, die nicht nur auf dem Datum basieren, sondern auch auf einem anderen Wert.

In Ihrem Beispiel müssen Sie möglicherweise Daten mit dem Wert instance = 1 für 7 Jahre aufbewahren, aber Daten mit instance = 2 können nach 4 Jahren verworfen werden. Durch die Unterpartitionierung können Sie die Unterpartitionen mit Daten mit Instanz = 2 unabhängig von den anderen Werten löschen.