3.2 スキーマ
3.3.8 表の横分割
一つの表を複数のユーザ用 RD エリア又はユーザ LOB 用 RD エリアに分割して格納することを表の横分 割といいます。また,横分割した表を横分割表といいます。表を横分割すると,ユーザ用 RD エリア又は ユーザ LOB 用 RD エリア単位に,表へのデータの格納,表の再編成,バックアップの取得などの運用がで きます。
例えば,UAP の種類(業務の種類)ごとに表を横分割して RD エリアに格納すると,バックアップの取得 時にはバックアップ対象 RD エリアにアクセスする UAP だけを停止すればよく,運用の操作性が向上しま す。
また,HiRDB/パラレルサーバの場合には,表にアクセスする処理を複数のバックエンドサーバ下のユーザ 用 RD エリア又はユーザ LOB 用 RD エリアにわたって並列化できるため,表に対するアクセスの高速化と 負荷の分散ができます。
表の横分割を次の図に示します。
図 3‒8 表の横分割
表を横分割する方法には,次に示す 2 種類があります。
• キーレンジ分割
• ハッシュ分割(フレキシブルハッシュ分割,FIX ハッシュ分割)
(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 データベースの論理構造
63
図 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),
3 データベースの論理構造
65
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/パラレルサーバの場合)
(4) 表の横分割の定義
表を横分割する場合には,定義系 SQL のCREATE TABLEに,次に示す要素を指定します。
• RD エリアへ表の割り当て
• 横分割の方法(格納条件指定,境界値指定又はハッシュ分割指定)
表をどのように横分割すれば処理性能が向上するかなど,表の横分割の設計方法については,マニュアル
「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
(5) ハッシュ分割表のリバランス機能
ハッシュ分割表のデータ量が増加したため RD エリアを追加すると(表の横分割数を増やすと),既存の RD エリアと新規追加した RD エリアとの間でデータ量の偏りが生じます。ハッシュ分割表のリバランス機能 を使用すると,表の横分割数を増やすときにデータ量の偏りを修正できます。ハッシュ分割表のリバランス 機能を次の図に示します。ハッシュ分割表のリバランス機能は,FIX ハッシュ及びフレキシブルハッシュの どちらにも適用できます。
ハッシュ分割表のリバランス機能については,マニュアル「HiRDB Version 9 システム運用ガイド」を参 照してください。
図 3‒14 ハッシュ分割表のリバランス機能
〔説明〕
1. ハッシュ分割表のデータが一杯になったため,ハッシュ分割表を格納する RD エリアを追加しまし た(表の横分割数を増やしました)。追加した RD エリアにはデータが配置されず,データ量の偏り が生じます。
3 データベースの論理構造
67
2. データ量の偏りを修正するためにリバランスユティリティ(pdrbal コマンド)を実行します。
3. リバランスユティリティを実行すると,ハッシュグループ単位にデータが移動して再配置されます。
これを表のリバランスといいます。ハッシュ分割表のリバランス機能を使用すると,分割キーを ハッシュした結果を基にして HiRDB がデータを 1,024 のグループ(これをハッシュグループとい います)に分けます。このグループごとに RD エリアのセグメントを割り当ててデータを格納しま す。データの再配置もこのハッシュグループ単位に実行されます。
適用基準
• データの増加が見込まれていて,将来 RD エリアを追加する可能性がある場合※
• データ容量が大きいため,表を再作成するのが難しい場合 注※
データが格納されている FIX ハッシュ分割表には RD エリアを追加できませんが,ハッシュ分割表 のリバランス機能を使用すると RD エリアを追加できるようになります。
運用方法
ハッシュ分割表のリバランス機能の運用手順の概略を次に示します。
1. ハッシュ分割表を定義するときにハッシュ関数 A〜F を使用して,その表をリバランス表として定 義します。
2. 表の横分割数を増やすため,表格納 RD エリアを追加します。
3. リバランスユティリティを実行して表のリバランスを行います。