8

明らかなことは別として、複数列のパーティション化とサブパーティションの使用の違いを説明できる人はいますか? また、OLTP シナリオにはどちらが適していますか? 詳細は、『Oracle Database管理者ガイド』のパーティション表と索引の管理に関する項を参照してください。

複数の列でパーティション化されたテーブルの (ばかげた) 例は次のとおりです。

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

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

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

4

2 に答える 2

3

あなたの場合はおそらく違いはありませんが、一般的にサブパーティショニングでは、範囲ハッシュ、範囲リストなど、2 つの異なる方法で分割できます。サブパーティションの例は範囲リストですが、単一レベルの範囲分割と同等です。ただし、サブパーティショニングがリンクしたドキュメントのこの例のような場合、単一レベルを使用できませんでした:

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')
         );
于 2010-12-07T17:14:15.367 に答える
0

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

あなたの例を使用すると、おそらく値instance = 1のデータを7年間保持する必要がありますが、instance=2のデータは4年後に破棄できます。サブパーティション化により、他の値とは関係なく、instance=2のデータを含むサブパーティションを削除できます。

于 2012-08-15T02:45:41.913 に答える