4.7.3 反映方法の設計
データの反映方法として,次の項目を設計する必要があります。
-
反映処理の方式
-
マルチFES機能を使う場合の反映処理の方式
-
反映処理のDISCONNECT発行間隔
-
イベント機能による反映処理の自動制御
-
反映処理のCOMMIT発行間隔
-
反映定義で定義されていない更新情報に対する処理
-
反映対象表の存在チェック
-
定義情報格納用共用メモリサイズ
- 〈この項の構成〉
(1) 反映処理の方式の設計
反映処理の方式には,トランザクション単位反映方式と表単位反映方式の二つがあります。トランザクション単位反映方式と表単位反映方式の詳細については,「3.3.3 反映処理の方式」を参照してください。
反映処理の方式は,反映環境定義のstartmode又はbreakmodeで指定します。
(a) トランザクション単位反映方式
抽出側DBで更新されたトランザクション順に反映側HiRDBのデータベースに反映します。
トランザクション単位反映方式では,同一形式の表(表名,列名,属性がすべて同じ表)に反映する場合は,反映定義を省略できます。
(b) 表単位反映方式
一つ又は複数の反映対象表ごとに反映グループを作り,各グループに並列に反映します。反映グループは,一つの反映処理に最大128個定義できます。反映グループは反映グループ定義で指定します。反映グループ定義については,「5.10.6 反映グループ定義」を参照してください。
表単位反映方式には,次に示す3種類があります。
-
表単位分割方式
-
キーレンジ単位分割方式
-
ハッシュ分割方式
- 表単位分割方式
-
表単位分割方式では抽出側DBで更新されたトランザクションを,ユーザの定義した反映グループごとに分けて,並列に反映します。
表単位分割方式で反映処理を実行する場合に,表同士で参照制約があるときは,参照制約がある表を同一グループとしてください。
- キーレンジ単位分割方式
-
キーレンジ単位分割方式では抽出側DBで更新されたトランザクションを,ユーザが定義したキーレンジに従って,並列に反映します。キーレンジ分割方式で反映処理を実行する場合には,次の点に注意してください。
-
一つの反映グループに定義できるキーレンジは,最大8個です。
-
キーレンジ分割条件文に指定できる列名は,抽出対象表のマッピングキーになる列に対応する,反映対象表の列名だけです。
-
一つのキーレンジ分割条件では,条件文を最大8個指定できます。一つのキーレンジ分割条件に複数の条件文を指定すると,すべての条件文がAND結合され,複雑なキーレンジ分割条件も指定できます。ただし,複雑なキーレンジ分割条件を指定すると,条件文の判定のために性能が低下する場合があります。分割よりも性能を重視する場合には,一つのキーレンジ分割条件に指定する条件文を少なくしてください。
-
一つのキーレンジに対して反映処理が集中する場合には,キーレンジ分割しないときより,性能が低下する場合があります。これはキーレンジ分割しないときと同様に処理が分散されていなく,さらにキーレンジ分割の判定処理を実行するためです。この場合には,反映側Datareplicatorを正常終了,又は即時終了し,反映処理が集中したキーレンジを,さらに分割した後,反映側Datareplicatorを再起動してください。
-
CPU性能が低い状態で多数の反映プロセス,SQLプロセスを起動させた場合には,マシンに掛かる負荷によって反映側Datareplicatorが異常終了することがあります。これを防ぐためには,反映処理の少ないキーレンジをother条件などでまとめ,1回で起動するプロセス数を少なくしてください。
-
- ハッシュ分割方式
-
ハッシュ分割方式では抽出側DBで更新されたトランザクションを,ハッシュ法で並列に反映します。
(2) マルチFES機能を使う場合の反映処理の方式の設計
反映側HiRDBがマルチFES機能を使っている場合,反映側DatareplicatorでもマルチFES機能に対応した反映処理を実行できます。マルチFES機能を使うときは,反映定義で反映グループに対応する反映先のフロントエンドサーバを指定する必要があります。反映側Datareplicatorでは,反映定義に従って反映先のフロントエンドサーバごとにSQLプロセスを対応付けます。このため,反映先のフロントエンドサーバごとに並行してSQL文を発行でき,フロントエンドサーバの負荷を分散できます。
表単位反映方式の分割方式ごとにマルチFES機能を使う例と,マルチFES機能を使うときの考慮点を次に示します。
(a) 表単位分割方式の場合
表単位分割方式の場合には,反映側HiRDBでサーバ単位に表をグループ化して格納していると,反映先のフロントエンドサーバごとに並行してSQL文を発行できるため,最もスループットの向上が期待できます。表単位分割方式でマルチFES機能に対応した例を次の図に示します。
(b) キーレンジ単位分割方式の場合
キーレンジ単位分割方式では,反映側HiRDBで横分割したキーレンジ単位に,別のサーバに表を分割して格納しているときに,反映先のフロントエンドサーバごとに並行してSQL文を発行できるため,スループットの向上が期待できます。
キーレンジ単位分割方式でマルチFES機能を使う例を次の図に示します。
(c) ハッシュ分割方式の場合
ハッシュ分割方式では,反映側HiRDBで表を分割して格納している場合に,ハッシュ法に従ってフロントエンドサーバごとに並行してSQL文を実行します。キーレンジ単位分割方式に比べて,マルチFES機能でのフロントエンドサーバごとに処理を分割できるので,スループットの向上が期待できます。
ハッシュ分割方式でマルチFES機能を使う例を次の図に示します。
マルチFES構成にしているシステムの場合,ハッシュ分割方式では,分割されるエリア別に,反映するデータをどのフロントエンドサーバで処理するかをあらかじめ設定できます。これによってフロントエンドサーバの負荷を分散でき,またフロントエンドサーバとRDエリアの属するバックエンドサーバが同じサーバ上にあるときには,フロントエンドサーバとバックエンドサーバの間の通信オーバヘッドを削減できます。
(d) 考慮点
反映側HiRDBのマルチFES環境に対して,反映定義で指定した反映先のフロントエンドサーバと実際に反映処理を実行するバックエンドサーバの起動するマシンが異なる場合には,1回の反映処理ごとにフロントエンドサーバとバックエンドサーバとの間の通信が発生して,効率的な処理が実行できません。このため,反映定義でフロントエンドサーバを指定する場合には,表データを格納しているマシンで起動しているフロントエンドサーバを指定してください。
(3) 反映処理のDISCONNECT発行間隔の設計
反映処理が反映情報キューファイルに蓄積されている更新情報の終端を検知してから,反映側HiRDBに対してDISCONNECTを発行するまでの間隔を設計します。反映処理のDISCONNECT発行間隔は,反映システム定義のdiscintvlオペランドで指定します。
DISCONNECT発行間隔の考慮点を次に示します。
-
DISCONNECTを発行しない場合には,発行間隔に0を指定します。
-
抽出側DBがHiRDBの場合には,抽出側Datareplicator定義の送信環境定義のsendintvlオペランドの指定値と,抽出側システムのトランザクション発生頻度を考慮して,discintvlオペランドを指定してください。抽出側DBがメインフレーム側DBの場合には,XDM/DS起動定義のRINTERVAL句の指定値と抽出側システムのトランザクション発生頻度を考慮して,discintvlオペランドを指定してください。
-
抽出側システムの業務終了まで短い間隔かつ高頻度でトランザクションが発生する場合は,0に近い値を指定するとDISCONNECTが発行される可能性が上がります。トランザクション発生頻度にぱらつきがある場合,sendintvlオペランド,又はRINTERVAL句を大きく設定している場合はこのオペランドを小さく指定し,小さく設定している場合は,sendintvlオペランド,又はRINTERVAL句より大きく指定するとDISCONNECT発行の最適化が図れます。
(4) イベント機能による反映処理の自動制御の設計
イベント機能を使って,抽出側システムで発行させたイベントに従って,反映処理の動作を切り替えることができます。イベント機能を使う場合,反映側Datareplicatorでは,抽出側システムで発行するイベントに対応させるイベントコードを反映環境定義で指定します。ここでは,切り替えができる反映処理の動作と,考慮点について説明します。
(a) イベント機能によって切り替えができる反映処理の動作
イベント機能によって切り替えができる反映処理の動作と反映環境定義との関係を次の表に示します。
イベント種別 |
反映処理の動作 |
指定するオペランド |
---|---|---|
反映処理停止イベント |
反映処理を停止します。 |
eventspd |
トランザクション単位反映イベント |
反映処理の動作中に,反映方式をトランザクション単位反映方式に切り替えます。 |
eventtrn |
表単位反映イベント |
反映処理の動作中に,反映方式を表単位反映方式に切り替えます。 |
eventtbl |
トランザクション単位反映再起動イベント |
反映処理の停止中に,反映処理をトランザクション単位反映方式で再起動します。 |
eventretrn |
表単位反映再起動イベント |
反映処理の停止中に,反映処理を表単位反映方式で再起動します。 |
eventretbl |
反映処理数リセットイベント |
反映側Datareplicatorの反映処理数をリセットします。 |
eventcntreset |
(b) イベント機能を使う場合の考慮点
-
抽出側システムで発行するイベントコードに対応するイベントコードを,反映環境定義の該当するオペランドに指定してください。
-
反映環境定義で指定されていないイベントコードに対応するイベントを抽出側システムで発行すると,反映側システムのsyslogファイルにメッセージが出力されます。これを利用して,抽出側システムの何らかの動作を,反映側システムに連絡できます。例えば,抽出側システムが終了したときに,反映側システムでは指定されていないイベントを抽出側システムから発行し,抽出側システムが終了したことを反映側システムに連絡することもできます。
(5) 反映処理のCOMMIT発行間隔の設計
コミットを発行する単位は,抽出側システムのトランザクション数で指定します。反映側HiRDBにコミットを発行する間隔は,反映環境定義のcmtintvl,trncmtintvl,又はtblcmtintvlオペランドで指定します。
コミットの発行間隔の設定時の考慮点を次に示します。
-
コミットを発行する間隔が小さいよりも大きい方が,より多くのトランザクションに対するSQL文を1回で発行するため,反映側HiRDBへの負荷が減り,性能面での向上が期待できます。ただし,障害が発生したときには,逆に反映できないトランザクションが多くなります。反映できなかったトランザクションは,次回の反映処理の起動時に自動的に反映されますが,コミットを発行する間隔が大きい場合には,回復するのにより長い時間が掛かります。
-
1コミット間隔の反映処理で出力される反映側HiRDBのログ量を考慮し,システムログファイルなど,障害回復用のファイルが満杯にならないようにしてください。
-
反映側HiRDBではSQL文としてPURGE TABLEを発行すると,SQL文を発行した時点でコミットを発行します。また,イベント検知時には反映側Datareplicatorが同期点を取得するため,コミットを発行します。このため,PURGE TABLEを含む更新情報を反映する場合やイベント検知時には,反映環境定義で定義したコミット間隔と異なることがあります。
-
反映方式ごとにCOMMIT発行間隔を指定できます。トランザクション単位反映方式のCOMMIT発行間隔はtrncmtintvlオペランドで,表単位反映方式のCOMMIT発行間隔はtblcmtintvlオペランドで指定します。両方の反映方式に共通のCOMMIT発行間隔はcmtintvlオペランドで指定します。
-
cmtintvl,trncmtintvl,及びtblcmtintvlオペランドの指定値を大きくすると,HiRDBサーバに対して次の影響があります。反映側Datareplicatorから発生するトランザクションの大きさは,反映先HiRDBの許容範囲を超えないようにしてください。
-
排他リソース量(行排他)が増加し,DBの排他リソース不足となる。
-
シンクポイントダンプの有効化処理のスキップ回数の上限を超え,反映処理がROLLBACKされる。
-
commit_wait_timeオペランドの指定値を超えた時点でコミットが発行され,反映処理が終了となる。
- 注意
-
反映側Datareplicatorから発生するトランザクションの実行時間は,実際にSQLを実行する時間と,次に反映するトランザクションの到着待ち時間を合計したものです。実際のトランザクション実行時間を次の図に示します。
次に反映するトランザクションの到着待ち時間の限界は,commit_wait_timeオペランドで指定します。commit_wait_timeオペランドの指定値を超えても次のトランザクションが到着しない場合は,反映側Datareplicatorが自動的にCOMMITを発行し,トランザクションを決着させます。
-
(6) 反映定義で定義されていない更新情報に対する処理の設計
反映定義で定義されていない更新情報について,その更新情報が定義された抽出側システムの抽出定義を反映定義と仮定して,反映処理を実行するかどうかを設計します。反映定義で定義されていない更新情報に対する処理は,反映環境定義のdefmergeオペランドで指定します。
反映定義で定義されていない更新情報に対する処理の考慮点を次に示します。
-
反映定義を省略している場合は,無条件に抽出定義を反映定義と仮定します。
(7) 反映対象表の存在チェックの設計
反映側Datareplicatorの起動時に,反映対象表が反映側HiRDBに存在するかどうかをチェックするかどうかを設計します。
反映対象表の存在チェックは,反映環境定義のtblcheckオペランドで指定します。
-
反映定義を省略している場合には,抽出側システムの抽出定義で定義されている抽出対象表が,反映側システムに存在するかどうかをチェックします。
-
反映定義がある場合は,存在チェックの指定に関係なく,反映定義で指定した反映対象表が,反映側システムに存在するかどうかをチェックします。
(8) 定義情報格納用共用メモリサイズの設計
反映側Datareplicatorを起動すると,定義情報格納用共用メモリは共用メモリ上に保持されます。定義情報格納用共用メモリサイズは,反映環境定義のdefshmsizeオペランドで指定します。
定義情報格納用共用メモリサイズの見積もり時の考慮点を次に示します。
-
定義情報格納用共用メモリには,反映情報キューファイルに格納される抽出側システムの抽出定義情報が保持されます。このため,定義情報格納用共用メモリサイズは,抽出側システムの抽出定義情報のサイズよりも大きくしてください。抽出定義情報よりも小さい値を指定した場合,反映側Datareplicatorの起動時にエラーになります。反映情報キューファイルに格納される抽出定義情報については,「4.7.7 反映側Datareplicatorのリソースの設計」を参照してください。
(9) 反映側HiRDBのリソースの設計
(a) 排他資源数
次の二つのうち大きい方の排他資源数を,反映先HiRDBのリソースとして見積もってください。また,抽出側HiRDBで実行するpdloadをデータ連携する場合,反映側ではすべてINSERT文に置き換えて実行します。よって,INSERTごとに排他資源が必要になります。そのため,HiRDBの排他資源を多量に消費し,反映側Datareplicatorの反映処理が排他資源不足で,SQLエラーとなる場合があります。pdloadをデータ連携する場合は,反映側DBの排他資源数をpdloadによる挿入件数以上とするように見積もってください。
-
load文で定義したすべての反映表に対して,SQL文"select * from 反映表"をPREPAREしたときの排他資源数
-
反映処理のCOMMIT間に発行するSQL文(INSERT文,UPDATE文,DELETE文)を実行できるだけの排他資源数
排他資源数の見積もりの詳細については,マニュアル「HiRDB システム定義」を参照してください。
(b) HiRDBに同時に接続するデータ連動識別子の数
HiRDBに同時に接続するデータ連動識別子の数を,HiRDBの定義のpd_max_usersオペランドの指定値に加算してください。HiRDBに同時に接続するデータ連動識別子の数は,反映システム定義に定義しているデータ連動識別子ごとに,次の数になります。
- トランザクション単位反映モードの場合
-
1個
- 表単位反映モードの場合
-
反映定義に定義しているgroup文で指定した分割数※の合計数
- 注※
-
分割数の詳細を次に示します。
-
表単位分割方式:1個
-
キーレンジ単位分割方式:キーレンジ分割数
-
ハッシュ分割方式:ハッシュ分割数,又はSQL分割数
-
- (例)
-
group G1 by T1 :1個
group G2 by T2 :1個
group G3 by T3 :5個
hash divide into 5
上記の場合,HiRDBに同時に接続するデータ連動識別子の数は7個(1+1+5)になります。
(c) HiRDBに同時にアクセスするテーブル数
HiRDBに同時にアクセスするテーブル数を,HiRDBの定義のpd_max_access_tablesオペランドの指定値に加算してください。HiRDBに同時にアクセスするテーブル数は,反映定義に指定したload文の数になります。