2010-12-07 47 views
7

En dehors de l'évidence, quelqu'un peut-il expliquer ce qui est différent entre le partitionnement multicolonne et l'utilisation d'une sous-partition? Et quel est le meilleur pour un scénario OLTP? Pour plus de détails, voir Managing Partitioned Tables and Indexes dans le Guide de l'administrateur de base de données Oracle.Partition Oracle multicolonne vs en utilisant une sous-partition

A (muet) exemple d'une table partitionnée sur plusieurs colonnes est:

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

De même, par exemple d'une table subpartitioned est:

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

Maintenant, quelle est la différence entre ces tables? Ne sont-ils pas "logiquement" les mêmes? Je sais qu'il est beaucoup plus facile d'ajouter des partitions à demo2 car vous devez diviser des partitions sur demo1 pour obtenir plus de partitions au fil du temps. Lequel est le meilleur dans un scénario OLTP? D'un autre côté, la raison pour laquelle je partitionne le numéro d'INSTANCE concerne Oracle RAC. J'essaye de créer une «affinité d'instance» pour empêcher le «bloc chaud» de ralentir la base de données car elles doivent être envoyées à travers l'interconnexion entre les noeuds RAC. (Nous avons prouvé empiriquement que cela fait une différence dans nos tests).

Répondre

2

Il n'y a probablement aucune différence dans votre cas, mais en général le sous-partitionnement vous permet de partitionner de 2 manières différentes, telles que range-hash, range-list. Votre exemple de sous-partition est range-list, mais est équivalent au partitionnement à plage de niveau unique. Cependant, on ne pouvait pas utiliser un seul niveau si votre sous-partitionnement était comme cet exemple du document que vous avez lié:

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

L'un des avantages des sous-partitions est qu'elles permettent la gestion individuelle à grains fins du sous -partitions. Par exemple, dans une table d'archivage de données, disons qu'il existe différentes exigences de rétention basées non seulement sur la date, mais aussi sur une autre valeur. En utilisant votre exemple, vous devez peut-être conserver des données avec la valeur instance = 1 pendant 7 ans, mais les données avec instance = 2 peuvent être supprimées après 4 ans. Le sous-partitionnement vous permet de supprimer les sous-partitions contenant des données avec instance = 2 indépendamment des autres valeurs.