HiRDB/パラレルサーバの場合,トランザクションの開始時にフロントエンドサーバとバックエンドサーバの接続処理が発生するため,高トラフィック及び高スループットが求められるシステムでは,この接続処理が性能ネックになることがあります。バックエンドサーバ接続保持機能を使用すると,トランザクションの終了時にフロントエンドサーバとバックエンドサーバの接続切断処理を行いません。このため,以降に実行されるトランザクションが同じバックエンドサーバを使用する場合,フロントエンドサーバとバックエンドサーバの接続処理が発生しなくなります。したがって,フロントエンドサーバとバックエンドサーバの接続処理が性能ネックになることを防げます。バックエンドサーバ接続保持機能を使用する場合のトランザクションの流れを次の図に示します。
図E-1 バックエンドサーバ接続保持機能を使用する場合のトランザクションの流れ
- 参考
- バックエンドサーバ接続保持機能を使用すると,フロントエンドサーバとバックエンドサーバの接続切断処理も削減されますが,接続切断処理が削減されても性能上の効果はあまりありません。
- バックエンドサーバ接続保持機能を使用しても,フロントエンドサーバとディクショナリサーバの接続は保持されません。トランザクション終了時にフロントエンドサーバとディクショナリサーバの接続切断処理を行います。
バックエンドサーバ接続保持機能を使用する場合は次に示す環境設定をしてください。
- バックエンドサーバ接続保持機能の設定
- バックエンドサーバ接続保持時間の設定
- クライアントの最大待ち時間の設定
- バックエンドサーバプロセス数の設定
(a) バックエンドサーバ接続保持機能の設定
バックエンドサーバ接続保持機能を使用する場合は,次に示すどちらかのオペランドを指定してください(両方指定してもかまいません)。
- pd_bes_connection_holdオペランド
- クライアント環境定義のPDBESCONHOLDオペランド
pd_bes_connection_holdオペランドを指定すると,全UAPに対してバックエンドサーバ接続保持機能が適用されます。クライアント環境定義のPDBESCONHOLDオペランドを指定すると,PDBESCONHOLDオペランドを指定したクライアントから実行するUAPに対してだけバックエンドサーバ接続保持機能が適用されます。なお,二つのオペランドの優先順位は2,1の順になります。オペランドの組み合わせの例を次に示します。
- pd_bes_connection_hold = Yを指定した場合
全UAPに対してバックエンドサーバ接続保持機能が適用されます。
- PDBESCONHOLD = YESを指定した場合
このオペランドを指定したクライアントから実行するUAPに対してだけバックエンドサーバ接続保持機能が適用されます。
- pd_bes_connection_hold = Y,PDBESCONHOLD = NOを指定した場合
PDBESCONHOLD = NOを指定したクライアントから実行するUAPに対しては,バックエンドサーバ接続保持機能を適用しません。それ以外のUAPに対してはバックエンドサーバ接続保持機能が適用されます。
バックエンドサーバ接続保持機能を使用する場合は,バックエンドサーバ接続保持時間を指定してください。バックエンドサーバ接続保持時間を超えると,次に実行されるトランザクションの終了時にフロントエンドサーバとバックエンドサーバの接続を切断します。
- バックエンドサーバ接続保持時間の計測期間
- バックエンドサーバ接続保持時間の計測開始時点と計測終了時点を次に示します。
- 計測開始時点:トランザクション処理が終了した時点
- 計測終了時点:次のトランザクション処理を開始した時点
- バックエンドサーバ接続保持時間の計測期間とHiRDBの処理を次の図に示します。
図E-2 バックエンドサーバ接続保持時間の計測期間とHiRDBの処理
- 〔説明〕
- [1]の期間はバックエンドサーバ接続保持時間以内のため,FESとBES1の接続を保持します。
- [2]の期間はバックエンドサーバ接続保持時間を超えたため,トランザクション(トランザクション3)の終了時にFESとBES2の接続を切断します。次に実行されるトランザクション(トランザクション4)の開始時に,FESとBES2の接続処理が発生します。
- 注意事項
- バックエンドサーバ接続保持時間を超えた時点で,フロントエンドサーバとバックエンドサーバの接続切断処理が発生するわけではありません。その点を間違えないようにしてください。バックエンドサーバ接続保持時間を超えたときのHiRDBの処理についてまとめると,次のようになります。
- バックエンドサーバ接続保持時間を超えたとき
HiRDBの処理は特にありません。
- トランザクションの開始時
フロントエンドサーバとバックエンドサーバの接続は保持されているため,フロントエンドサーバとバックエンドサーバの接続処理は発生しません。
- トランザクションの終了時
フロントエンドサーバとバックエンドサーバの接続切断処理が発生します。
- 次回のトランザクションの開始時
フロントエンドサーバとバックエンドサーバの接続処理が発生します。
- バックエンドサーバ接続保持時間の目安
- UAPの接続時間が短いシステムの場合は,バックエンドサーバ接続保持時間に0を指定してください。
- 常時接続,UAPの接続時間が長いシステムの場合は,バックエンドサーバ接続保持時間を指定しないで,省略値(1秒)を使用してください。
- バックエンドサーバ接続保持時間に0を指定した場合の動作
- バックエンドサーバ接続保持時間に0を指定した場合は,時間監視を行わないで,フロントエンドサーバとバックエンドサーバの接続を保持し続けます。ただし,「(4)(b)接続保持が解除される場合」で示す場合は,接続を切断します。
- バックエンドサーバ接続保持時間の指定方法
- バックエンドサーバ接続保持時間は,次に示すどちらかのオペランドで指定します(両方指定してもかまいません)。
- pd_bes_conn_hold_trn_intervalオペランドで指定したバックエンドサーバ接続保持時間は,全UAPに対して適用されます。クライアント環境定義のPDBESCONHTIオペランドで指定したバックエンドサーバ接続保持時間は,PDBESCONHTIオペランドを指定したクライアントから実行するUAPに対してだけ適用されます。なお,二つのオペランドの優先順位は2,1の順になります。オペランドの組み合わせの例を次に示します。
- ・pd_bes_conn_hold_trn_interval = 10を指定した場合
- 全UAPに対してバックエンドサーバ接続保持時間が10秒になります。
- ・PDBESCONHTI = 10を指定した場合
- このオペランドを指定したクライアントから実行するUAPに対してバックエンドサーバ接続保持時間が10秒になります。
- ・pd_bes_conn_hold_trn_interval = 10,PDBESCONHTI = 20を指定した場合
- PDBESCONHTIオペランドを指定したクライアントから実行するUAPに対しては,バックエンドサーバ接続保持時間が20秒になります。それ以外のUAPに対してはバックエンドサーバ接続保持時間が10秒になります。
(c) クライアントの最大待ち時間の設定
接続保持中のバックエンドサーバのユニットが異常終了した場合,そのバックエンドサーバで次に実行されるトランザクションが無応答状態になることがあります。また,トランザクションキューイング機能を使用している場合,pd_ha_trn_restart_retry_timeによるリトライ処理が行われないで無応答状態になることがあります(計画系切り替えのときも無応答状態になることがあります)。このため,クライアント環境定義のPDCWAITTIMEオペランドでクライアントの最大待ち時間を指定して,トランザクションが無応答状態になったときに備えてください。PDCWAITTIMEオペランドの値を超えても応答がない場合はトランザクションがキャンセルされます。
(d) バックエンドサーバプロセス数の設定
バックエンドサーバ接続保持機能を使用する場合,個々のバックエンドサーバプロセス数をシステム内の全フロントエンドサーバプロセス数より大きくしてください。そのためには,システム定義のオペランドの指定値を次に示す条件式を満たすように設定してください。
- pd_max_bes_processオペランドの値≧
- pd_max_usersオペランドの値×フロントエンドサーバ数
この条件式を満たさない場合,バックエンドサーバプロセス数が不足し,メッセージキュー監視機能によってHiRDB(HiRDB/パラレルサーバの場合はユニット)が異常終了したり,SQLがエラーになったりすることがあります。
また,UAPが動いている状態でユティリティを実行する場合,バックエンドサーバプロセス数にはユティリティの分の余裕値を確保してください。
(a) 定義系SQLを実行しないでください
定義系SQLを実行するUAPに対しては,バックエンドサーバ接続保持機能を使用しないでください。定義系SQLを実行するUAPに対してこの機能を使用すると,フロントエンドサーバとバックエンドサーバ間,ディクショナリサーバとバックエンドサーバ間の接続が同時に発生することがあるため,バックエンドサーバプロセス数が不足し,SQLエラーになることがあります。したがって,定義系SQLを実行するUAPのクライアント環境定義のPDBESCONHOLDオペランドにはNOを指定してください。
(b) 接続保持が解除される場合
バックエンドサーバ接続保持機能を使用している場合でも,次に示す場合はフロントエンドサーバとバックエンドサーバの接続を切断します。
- DISCONNECT文(HiRDB XAライブラリの使用時はxa_close),PDCWAITTIMEオーバなどによって,フロントエンドサーバとクライアント間の接続が切断された場合
- ロールバックした場合(内部ロールバックを含む)
- サーバプロセスのメモリサイズ監視機能によって,使用したメモリの上限を超えた場合
- 内部的に多量のメモリを使用した場合
- pdpfreshコマンド(-fオプションなし)を実行した場合
- ホールダブルカーソルのカーソルをクローズした場合
(c) バックエンドサーバ接続保持時間を超えても接続が切断されないことがあります
バックエンドサーバ接続保持時間を超えても,次に示す場合はフロントエンドサーバとバックエンドサーバの接続を切断しません。
- ホールダブルカーソルを使用している場合
- UAP環境定義で指定したローカルバッファを使用している場合
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.