明白な点を除けば、複数列のパーティション化とサブパーティションの使用の違いは誰でも説明できますか? 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ノード間の相互接続を介して送信される必要があるため、データベースの速度を落とさないようにするために、「インスタンスの親和性」を作成しようとしています。 (これは私たちのテストに違いがあることを経験的に証明しています)。