Oracle multicolumn Partitionierung vs mit einer subpartition

Abgesehen von den offensichtlichen, kann mir jemand erklären, was ist der Unterschied zwischen einem mehrspaltigen partitionieren und mit einer subpartition? Und welche ist besser für einen OLTP-Szenario? Für details, siehe Verwalten von Partitionierten Tabellen und Indizes im Oracle Database Administrator ' s Guide.

Eine (dumme) Beispiel für eine partitionierte Tabelle für mehrere Spalten 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 subpartitioned Tabelle:

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? Sind Sie nicht "logisch" das gleiche? Ich weiß, das ist viel einfacher, um Partitionen hinzuzufügen, zu demo2 wie Sie brauchen, um split-Partitionen auf demo1, um mehr Partitionen, wie die Zeit vergeht. Was ist besser in einem OLTP-Szenario?

On a side note, der Grund warum ich die Partitionierung auf die INSTANZ-Nummer zu tun hat, die mit Oracle RAC. Ich bin versucht, zu erstellen eine "Instanz Affinität" zu stoppen "hot Blocks" von der Verlangsamung der Datenbank, diese müssen gesendet werden über den interconnect zwischen den RAC-Knoten. (Wir haben empirisch bewiesen, dass diese macht einen großen Unterschied in unseren Tests).

InformationsquelleAutor VinceJS | 2010-12-07

Schreibe einen Kommentar