8.2.3 表の横分割
ここでは,性能をさらに向上させるために,表を横分割する場合の設計方法を説明します。横分割の効果,使用するHiRDBサーバの種類,および表特性ごとの設計方法について説明します。
(1) 表の横分割の効果
次の条件に該当する場合は,表を横分割すると性能が向上できることがあります。性能をより速くしたい場合は,横分割の適用を検討してください。
-
表に対するアクセスの多重度が高い場合
表を横分割することで,負荷を分散し,スループットが向上できることがあります。
-
表のデータ量が多く,かつ大部分のデータにアクセスする場合
表を横分割することで,アクセスを並列実行し,レスポンスが向上できることがあります。
-
表のデータ量が多く,かつ一部分のデータにアクセスする場合
表を横分割することで,アクセスするデータの範囲を限定し,レスポンスが向上できることがあります。
表の横分割の効果の概要を,次に示します。
(2) 使用するHiRDBサーバの種類
表を横分割する目的によっては,HiRDB/パラレルサーバの場合だけ実現できることがあります。目的に応じて,使用するHiRDBサーバを決定してください。使用するHiRDBサーバの種類を,次の表に示します。
表を横分割する目的 |
使用するHiRDBサーバ |
|
---|---|---|
負荷を分散し,スループットを向上したい場合 |
RDエリアやグローバルバッファに関する競合を分散したい場合 |
HiRDB/シングルサーバおよび HiRDB/パラレルサーバ |
ディスクの入出力処理の負荷を分散したい場合 |
HiRDB/シングルサーバおよび HiRDB/パラレルサーバ※1 |
|
CPUの負荷を分散したい場合 |
HiRDB/パラレルサーバ |
|
並列実行し,レスポンスを向上したい場合 |
HiRDB/パラレルサーバ※2 |
|
アクセスするデータの範囲を限定し,レスポンスを向上したい場合 |
HiRDB/シングルサーバおよび HiRDB/パラレルサーバ |
(3) トランザクション表
トランザクション表は,表を横分割すると,性能向上できることがあります。設計方法について次に説明します。
(a) 分割キーの設計
次の条件を満たす列を分割キーにしてください。複数の列の組み合わせによって条件を満たす場合は,複数列の分割キーにしてください。
-
表を横分割する目的に適した列
-
結合キーの列(HiRDB/パラレルサーバで表をサーバ間横分割する場合)
条件の詳細を,次に説明します。
-
表を横分割する目的に適した列
表を横分割する目的に応じて,分割キーを設計してください。
-
表の横分割の目的がスループット向上の場合
アクセスが均一に分散できる列を分割キーにしてください。
-
表の横分割の目的がレスポンス向上の場合
データを均一に分散できる列を分割キーにしてください。
-
-
結合キーの列(HiRDB/パラレルサーバで表をサーバ間横分割する場合)
HiRDB/パラレルサーバで表をサーバ間横分割する場合は,結合キーである列を分割キーにしてください。これによって,表を結合する処理をサーバごとに独立できるため,効率良く処理できます。結合キーではない列を分割キーにすると,1件のデータの結合処理で複数のサーバを使うため,処理効率が悪くなります。
結合キーを分割キーにする場合と,結合キーではない列を分割キーにする場合の例を次に示します。
図8‒4 結合キーである列を分割キーにする例
- [説明]
-
-
RDDATA1,RDDATA2,RDDATA3:在庫表の格納先RDエリア
-
RDDATA4,RDDATA5,RDDATA6:発注表の格納先RDエリア
-
BES1:RDDATA1,RDDATA4を管理するバックエンドサーバ
-
BES2:RDDATA2,RDDATA5を管理するバックエンドサーバ
-
BES3:RDDATA3,RDDATA6を管理するバックエンドサーバ
図8‒5 結合キーではない列を分割キーにする例
-
- [説明]
-
-
RDDATA1,RDDATA2,RDDATA3:在庫表の格納先RDエリア
-
RDDATA4,RDDATA5,RDDATA6:発注表の格納先RDエリア
-
BES1:RDDATA1,RDDATA4を管理するバックエンドサーバ
-
BES2:RDDATA2,RDDATA5を管理するバックエンドサーバ
-
BES3:RDDATA3,RDDATA6を管理するバックエンドサーバ
-
- [ここがポイント]
-
結合キーが複数ある場合は,結合キーの中から,表を横分割する目的に適した結合キーを分割キーにしてください。このとき,業務上はその列が不要であっても,結合するすべての表に分割キーの列を作成し,同じ分割キーで横分割してください。結合キーが複数ある場合の例を次に示します。
図8‒6 結合キーが複数ある例 - [説明]
-
この例では,表を横分割する目的に適した結合キーが,店番号列です。業務上,受注明細表に店番号列は不要ですが,分割キーであるため作成し,結合キーに入れています。
(b) 分割方法の設計
表を横分割する方法には,次に示す2種類があります。
-
キーレンジ分割
-
ハッシュ分割
横分割方法の詳細は,マニュアル「HiRDB システム導入・設計ガイド」の「表の横分割の種類」を参照してください。
横分割方法は,次の考え方で設計してください。
-
分割キーのデータの種類や分布が把握できる場合
キーレンジ分割にすることをお勧めします。キーレンジ分割の場合,データの配置を細かく調整できます。
-
分割キーのデータの種類や分布が把握できない場合
ハッシュ分割にしてください。
(4) マスタ表
マスタは,データ量が少ないため,横分割しても性能向上の効果は低いです。ただし,HiRDB/パラレルサーバで,結合するトランザクション表がサーバ間横分割する場合は,結合の処理をサーバごとに独立できるように設計してください。次に,設計の考え方を説明します。
-
トランザクション表との結合キーが,トランザクション表の分割キーを含む場合
トランザクション表の分割キーと同じ列を分割キーにして,横分割してください。この対応方法が,最も効率が良いです。
-
トランザクション表との結合キーが,トランザクション表の分割キーを含まない場合
非分割表にしてください。横分割の目的が次の場合は,共用表にすると,結合処理をサーバごとに独立できます。
-
負荷分散によるスループット向上
-
アクセス範囲の限定によるレスポンス向上
ただし,共用表にするためには,条件があります。共用表の詳細は,マニュアル「HiRDB システム導入・設計ガイド」の「共用表」を参照してください。
共用表にしない場合は,マスタ表を管理するバックエンドサーバに処理が集中しないように,非分割のマスタ表は,別のバックエンドサーバに配置してください。
ただし,1つのマスタ表へのアクセス頻度が非常に高く負荷が集中する場合は,そのマスタ表は主キーを分割キーにして横分割してください。
-
マスタ表を横分割する対応の例を次に示します。
- [説明]
-
店マスタ表には,結合するトランザクション表の分割キーである店番号列があるため,店番号列を分割キーとして横分割します。
-
RDDATA11,RDDATA12,RDDATA13:受注表の格納先RDエリア
-
RDDATA14,RDDATA15,RDDATA16:店マスタ表の格納先RDエリア
-
BES1:RDDATA11,RDDATA14を管理するバックエンドサーバ
-
BES2:RDDATA12,RDDATA15を管理するバックエンドサーバ
-
BES3:RDDATA13,RDDATA16を管理するバックエンドサーバ
-
マスタ表を共用表にする対応の例を次に示します。
- [説明]
-
商品マスタ表には,結合するトランザクション表の分割キーである店番号列がないため,横分割はしません。この例では,共用表にしています。
-
RDDATA17,RDDATA18,RDDATA19:受注明細表の格納先RDエリア
-
RDDATA20:商品マスタ表の格納先RDエリア(共用RDエリア)
-
BES1:RDDATA17を管理し,RDDATA20が参照できるバックエンドサーバ
-
BES2:RDDATA18,RDDATA20を管理するバックエンドサーバ
-
BES3:RDDATA19を管理し,RDDATA20が参照できるバックエンドサーバ
図8‒9 マスタ表の対応の例(非分割表にする場合)
-
- [説明]
-
商品マスタ表には,結合するトランザクション表の分割キーである店番号列がないため,横分割はしません。この例では,商品マスタ表は共用表にする条件を満たさないため,非分割表にしています。同様に,非分割表にした顧客マスタ表は,負荷を分散するため,商品マスタ表とは別のバックエンドサーバに配置します。
-
RDDATA11,RDDATA12,RDDATA13:受注表の格納先RDエリア
-
RDDATA17,RDDATA18,RDDATA19:受注明細表の格納先RDエリア
-
RDDATA21:商品マスタ表の格納先RDエリア
-
RDDATA22:顧客マスタ表の格納先RDエリア
-
BES1:RDDATA11,RDDATA17を管理するバックエンドサーバ
-
BES2:RDDATA12,RDDATA18,RDDATA21を管理するバックエンドサーバ
-
BES3:RDDATA13,RDDATA19,RDDATA22を管理するバックエンドサーバ
-
(5) 採番表
採番表は,トランザクション表と比べてアクセス頻度が少ないため,横分割しても性能向上の効果は低いです。ただし,HiRDB/パラレルサーバで,採番データを格納するトランザクション表がサーバ間横分割する場合は,採番データがサーバ内で受け渡しできると効率が良いです。サーバごとの採番とし,各サーバに採番表を作成することをお勧めします。
(6) 履歴蓄積表
表の横分割の考え方は,トランザクション表と同じです。「トランザクション表」を参照してください。