12.4.1 表のマトリクス分割の効果と定義方法
表の二つの列を分割キーとして,分割方法の指定を組み合わせて分割することをマトリクス分割といいます。一つ目の分割キーとなる列を第1次元分割列,二つ目の分割キーとなる列を第2次元分割列といいます。マトリクス分割は,第1次元分割列で境界値指定のキーレンジ分割をし,分割されたデータをさらに第2次元分割列で分割します。第2次元分割列に指定できる分割方法を次に示します。
-
境界値指定のキーレンジ分割
-
フレキシブルハッシュ分割※
-
FIXハッシュ分割※
- 注※
-
指定できるハッシュ関数はHASH0〜HASH6とHASHZです。HASHA〜HASHFは指定できません。
マトリクス分割によって分割された表をマトリクス分割表といいます。
なお,表をマトリクス分割するためには,HiRDB Advanced High Availabilityが必要です。
- 〈この項の構成〉
(1) 表のマトリクス分割の効果
複数の列を分割キーとして分割することで得られる効果を次に示します。
-
SQL処理の高速化
SQLの処理を並列に実行したり,複数のキーによる検索で検索範囲を絞り込んで高速に処理したりできます。
-
運用時間の短縮
より細かな分割ができるため,1RDエリアの大きさを小さくして,再編成,バックアップの取得,障害発生時の回復作業などに要する時間を短縮できます。
(2) 適用基準
次の場合,境界値指定のキーレンジ分割の組み合わせをお勧めします。
-
第1次元分割列による分割では,各境界値に該当するデータ量が多大となる
-
表にアクセスするUAPで指定できる探索条件に指定する列が複数あり,複数の列でアクセスするRDエリアを限定したい,又は一つのSQL文中でn番目に指定した列だけでアクセスするRDエリアを限定したい
次の場合,境界値指定のキーレンジ分割とハッシュ分割の組み合わせをお勧めします。
-
第1次元分割列による分割では,各境界値に該当するデータ量が多大となる
-
第1次元分割列で分割された範囲のデータを,均等に細分化して格納したい
次の場合,境界値指定のキーレンジ分割とハッシュ分割の組み合わせで,ハッシュ分割に指定するRDエリア名を重複指定することをお勧めします。同じRDエリア名を重複指定することによって,分割数はそのままで,実際に使用するRDエリア数を減らすことができます。また,各RDエリアに格納するデータ量も均等にできます。RDエリア名を重複指定する場合については,図「ハッシュ分割で表格納用RDエリアを重複指定する例」を参照してください。
-
1RDエリアのサイズを一定にすることで各RDエリアの再編成処理の時間を一定にしたいが,第1次元分割列の境界値による分割ではデータ量を均等に分ける境界値の指定が難しいため,一定にできない
-
分割数が検索時の性能に影響しているため,分割数を減らしたい
(3) 定義方法
定義系SQLのCREATE TABLEのPARTITIONED BY MULTIDIMオペランドで次の指定をします。
-
RDエリアへの表の割り当て
-
マトリクス分割の方法(分割キー,分割方法)
定義時の規則を次に示します。
-
第2次元分割列が境界値指定のキーレンジ分割の場合
-
分割キーの指定可能数は2(第1次元分割列の分割キー+第2次元分割列の分割キー)です。第1次元分割列と第2次元分割列で同じ分割キーは指定できません。
-
-
第2次元分割列がハッシュ分割の場合
-
分割キーの指定可能数は2〜16です。フレキシブルハッシュ分割のとき,第2次元分割列の分割キーだけは更新できます。FIXハッシュ分割のとき,分割キーの更新はできません。
-
定義例は「マトリクス分割の例」を参照してください。
(4) マトリクス分割の例
(a) 境界値指定のキーレンジ分割の組み合わせの場合
顧客表の登録日及び店番号に境界値を指定し,登録日と店番号によって,表をマトリクス分割します。それぞれの顧客データを次のようにユーザ用RDエリア(USR01〜USR06)に格納します。格納するのに必要なユーザ用RDエリア数は,(境界値数+1)×(境界値数+1)なので,この例の場合,3×2=6です。
登録日 |
店番号 |
|
---|---|---|
100以下 |
100より大きい |
|
2000年以前 |
USR01 |
USR02 |
2001年 |
USR03 |
USR04 |
2002年以降 |
USR05 |
USR06 |
マトリクス分割する表を定義するSQL文を次に示します。
CREATE FIX TABLE 顧客表 (登録日 DATE, 店番号 INT, 顧客名 NCHAR(10)) PARTITIONED BY MULTIDIM( 登録日 (('2000-12-31'),('2001-12-31')), …1. 店番号 ((100)) …2. )IN ((USR01,USR02),(USR03,USR04),(USR05,USR06))
- 〔説明〕
-
-
第1次元分割列名(一つ目の分割キーとなる列名)と,その境界値リストを指定します。
-
第2次元分割列名(二つ目の分割キーとなる列名)と,その境界値リストを指定します。
-
マトリクス分割の例を次の図に示します。
(b) 境界値指定のキーレンジ分割とハッシュ分割の組み合わせの場合
第2次元分割列でFIXハッシュ分割する場合の例について説明します。
顧客表の登録日に境界値を指定し,店番号と地域コードをハッシュ関数で三分割することによって,表をマトリクス分割します。それぞれの顧客データを次のようにユーザ用RDエリア(USR01〜USR09)に格納します。格納するのに必要なユーザ用RDエリア数は,(境界値数+1)×(ハッシュ関数で分割するユーザ任意の数)なので,この例の場合,3×3=9です。
登録日 |
店番号と地域コード(ハッシュ関数で三分割) |
||
---|---|---|---|
2002年以前 |
USR01 |
USR02 |
USR03 |
2003年 |
USR04 |
USR05 |
USR06 |
2004年以降 |
USR07 |
USR08 |
USR09 |
マトリクス分割する表を定義するSQL文を次に示します。
CREATE FIX TABLE 顧客表 (登録日 DATE, 店番号 INT, 地域コード INT, 顧客名 NCHAR(10)) PARTITIONED BY MULTIDIM (登録日 (('2002-12-31'),('2003-12-31')), …1. FIX HASH HASH6 BY 店番号, 地域コード …2. )IN ((USR01,USR02,USR03), (USR04,USR05,USR06), (USR07,USR08,USR09))
- 〔説明〕
-
-
第1次元分割列名(一つ目の分割キーとなる列名)と,その境界値リストを指定します。
-
第2次元列分割名(二つ目の分割キーとなる列名)と,ハッシュ関数名を指定します。
-
マトリクス分割の例を次の図に示します。