2010-12-07 36 views
7

明白な点を除けば、複数列のパーティション化とサブパーティションの使用の違いは誰でも説明できますか? OLTPシナリオではどちらが優れていますか?詳細は、「Oracle Database管理者ガイド」の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 
); 

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

は、これらのテーブル間の違いは何ですか?それらは「論理的に」同じではないか?時間の経過とともにより多くのパーティションを取得するためには、デモ1のパーティションを分割する必要があるため、demo2にパーティションを追加する方がはるかに簡単です。 OLTPシナリオではどちらが良いでしょうか?

INSTANCE番号をパーティショニングする理由は、Oracle RACと関係があります。 "ホットブロック"がRACノード間の相互接続を介して送信される必要があるため、データベースの速度を落とさないようにするために、「インスタンスの親和性」を作成しようとしています。 (これは私たちのテストに違いがあることを経験的に証明しています)。

答えて

2

あなたのケースではおそらく違いはありませんが、通常、サブパーティション化では、range-hash、range-listなどの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

1つの利点は、サブの個々のきめ細かい管理が可能ということですパーティション。たとえば、データアーカイブテーブルでは、日付だけでなく別の値に基づいて、さまざまな保存要件があるといえます。

例を使用すると、7年間は値インスタンス= 1のデータを保持する必要がありますが、インスタンス= 2のデータは4年後に破棄することができます。サブパーティショニングを使用すると、インスタンス= 2のデータを含むサブパーティションを他の値とは独立して削除できます。

関連する問題