スケーラブルデータベースサーバ HiRDB Version 8 解説(Windows(R)用)

[目次][用語][索引][前へ][次へ]

3.3.8 表の横分割

一つの表を複数のユーザ用RDエリア又はユーザLOB用RDエリアに分割して格納することを表の横分割といいます。また,横分割した表を横分割表といいます。表を横分割すると,ユーザ用RDエリア又はユーザLOB用RDエリア単位に,表へのデータの格納,表の再編成,バックアップの取得などの運用ができます。

例えば,UAPの種類(業務の種類)ごとに表を横分割してRDエリアに格納すると,バックアップの取得時にはバックアップ対象RDエリアにアクセスするUAPだけを停止すればよく,運用の操作性が向上します。

また,HiRDB/パラレルサーバの場合には,表にアクセスする処理を複数のバックエンドサーバ下のユーザ用RDエリア又はユーザLOB用RDエリアにわたって並列化できるため,表に対するアクセスの高速化と負荷の分散ができます。

表の横分割を次の図に示します。

図3-8 表の横分割

[図データ]

表を横分割する方法には,次に示す2種類があります。

<この項の構成>
(1) キーレンジ分割
(2) ハッシュ分割
(3) 表の横分割の例
(4) 表の横分割の定義
(5) ハッシュ分割表のリバランス機能

(1) キーレンジ分割

表を構成する列のうち,特定の列が持つ値の範囲を条件として表を横分割することをキーレンジ分割といいます。表を横分割するときの条件にした特定の列を分割キーといいます。キーレンジ分割は,表のデータがどのRDエリアに格納されているかどうかを意識したい場合に使用します。横分割の指定方法には,次に示す2種類があります。

(a) 格納条件指定

比較演算子を使用して,それぞれのRDエリアへの格納条件を指定します。一つのRDエリアに対して,格納条件で指定された一つの範囲だけを指定できます。キーレンジ分割(格納条件指定)の例を次の図に示します。

図3-9 キーレンジ分割(格納条件の指定)の例

[図データ]

〔説明〕
SCODEを分割キーとして在庫表を横分割します。格納RDエリアはRDAREA01とRDAREA02とします。
   CREATE TABLE ZAIKO
       (SCODE CHAR(4) NOT NULL,SNAME NCHAR(8),
       COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER
       )IN ((RDAREA01)SCODE<='353M',(RDAREA02));
(b) 境界値指定

定数を使用して,それぞれのRDエリアに格納するデータの,境界となる値を昇順に指定します。一つのRDエリアに対して,境界値で区切られた複数の範囲を指定できます。キーレンジ分割(境界値指定)の例を次の図に示します。

図3-10 キーレンジ分割(境界値指定)の例

[図データ]

〔説明〕
SCODEを分割キーとして在庫表を横分割します。格納RDエリアはRDAREA01とRDAREA02とします。
   CREATE TABLE ZAIKO
       (SCODE CHAR(4) NOT NULL,SNAME NCHAR(8),
       COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER
       )PARTITIONED BY SCODE
       IN ((RDAREA01)'302S',(RDAREA02)'591S',(RDAREA01));

(2) ハッシュ分割

表を構成する列が持つ値をハッシュ関数を使用して,均等にRDエリアに格納し,表を横分割することをハッシュ分割といいます。表を横分割するときに指定した特定の列を分割キーといいます。ハッシュ分割は,キーの範囲を意識しないで,表のデータをRDエリアに均等に格納したい場合に使用します。ハッシュ分割の種類を次の表に示します。

表3-4 ハッシュ分割の種類

ハッシュ分割の種類 説明
フレキシブルハッシュ分割 表を分割してRDエリアに格納する場合,どのRDエリアに分割されるか定まりません。このため,検索処理では,該当する表があるすべてのバックエンドサーバが対象になります。
FIXハッシュ分割 表がどのRDエリアに分割されたかをHiRDBが認識します。このため,検索処理では,該当するデータがあると予測されるバックエンドサーバだけが対象になります。

ハッシュ分割の例を次の図に示します。

図3-11 ハッシュ分割の例

[図データ]

〔説明〕
SCODEを分割キーとして在庫表を横分割します。格納RDエリアはRDAREA01とRDAREA02とします。
なお,実際のデータの格納先RDエリアはこの例と異なることがあります。
   CREATE TABLE ZAIKO
       (SCODE CHAR(4) NOT NULL,SNAME NCHAR(8),
       COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER
       ) [FIX] HASH HASH6 BY SCODE
       IN (RDAREA01,RDAREA02);
注※ FIXハッシュ分割の場合に指定します。

(3) 表の横分割の例

横分割表を格納するRDエリアは異なるディスク上に配置してください。同じディスク上に配置すると,ディスクに対するアクセスの競合が発生して性能が向上しません。

また,HiRDB/パラレルサーバの場合,サーバ間横分割及びサーバ内横分割という概念があります。複数のバックエンドサーバにわたって表が横分割される形態をサーバ間横分割といいます。それに対して,一つのバックエンドサーバ内で表が横分割される形態をサーバ内横分割といいます。HiRDB/シングルサーバの場合は,常にサーバ内横分割になります。

HiRDB/シングルサーバ及びHiRDB/パラレルサーバの表の横分割の例を次の図に示します。

図3-12 表の横分割の例(HiRDB/シングルサーバの場合)

[図データ]

図3-13 表の横分割の例(HiRDB/パラレルサーバの場合)

[図データ]

〔説明〕
BES1〜BES4に表がサーバ間横分割されています。

(4) 表の横分割の定義

表を横分割する場合には,定義系SQLのCREATE TABLEに,次に示す要素を指定します。

表をどのように横分割すれば処理性能が向上するかなど,表の横分割の設計方法については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

(5) ハッシュ分割表のリバランス機能

ハッシュ分割表のデータ量が増加したためRDエリアを追加すると(表の横分割数を増やすと),既存のRDエリアと新規追加したRDエリアとの間でデータ量の偏りが生じます。ハッシュ分割表のリバランス機能を使用すると,表の横分割数を増やすときにデータ量の偏りを修正できます。ハッシュ分割表のリバランス機能を次の図に示します。ハッシュ分割表のリバランス機能は,FIXハッシュ及びフレキシブルハッシュのどちらにも適用できます。

ハッシュ分割表のリバランス機能については,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。

図3-14 ハッシュ分割表のリバランス機能

[図データ]

〔説明〕
  1. ハッシュ分割表のデータが一杯になったため,ハッシュ分割表を格納するRDエリアを追加しました(表の横分割数を増やしました)。追加したRDエリアにはデータが配置されず,データ量の偏りが生じます。
  2. データ量の偏りを修正するためにリバランスユティリティpdrbalコマンド)を実行します。
  3. リバランスユティリティを実行すると,ハッシュグループ単位にデータが移動して再配置されます。これを表のリバランスといいます。ハッシュ分割表のリバランス機能を使用すると,分割キーをハッシュした結果を基にしてHiRDBがデータを1,024のグループ(これをハッシュグループといいます)に分けます。このグループごとにRDエリアのセグメントを割り当ててデータを格納します。データの再配置もこのハッシュグループ単位に実行されます。

適用基準
  • データの増加が見込まれていて,将来RDエリアを追加する可能性がある場合
  • データ容量が大きいため,表を再作成するのが難しい場合
注※
データが格納されているFIXハッシュ分割表にはRDエリアを追加できませんが,ハッシュ分割表のリバランス機能を使用するとRDエリアを追加できるようになります。

運用方法
ハッシュ分割表のリバランス機能の運用手順の概略を次に示します。
  1. ハッシュ分割表を定義するときにハッシュ関数A〜Fを使用して,その表をリバランス表として定義します。
  2. 表の横分割数を増やすため,表格納RDエリアを追加します。
  3. リバランスユティリティを実行して表のリバランスを行います。