付録E.1 バックエンドサーバ接続保持機能(HiRDB/パラレルサーバ限定)
- 〈この項の構成〉
(1) バックエンドサーバ接続保持機能とは
HiRDB/パラレルサーバの場合,トランザクションの開始時にフロントエンドサーバとバックエンドサーバの接続処理が発生するため,高トラフィック及び高スループットが求められるシステムでは,この接続処理が性能ネックになることがあります。バックエンドサーバ接続保持機能を使用すると,トランザクションの終了時にフロントエンドサーバとバックエンドサーバの接続切断処理を行いません。このため,以降に実行されるトランザクションが同じバックエンドサーバを使用する場合,フロントエンドサーバとバックエンドサーバの接続処理が発生しなくなります。したがって,フロントエンドサーバとバックエンドサーバの接続処理が性能ネックになることを防げます。
バックエンドサーバ接続保持機能を使用する場合のトランザクションの流れを次の図に示します。
- 参考
-
-
バックエンドサーバ接続保持機能を使用すると,フロントエンドサーバとバックエンドサーバの接続切断処理も削減されますが,接続切断処理が削減されても性能上の効果はあまりありません。
-
バックエンドサーバ接続保持機能を使用しても,フロントエンドサーバとディクショナリサーバの接続は保持されません。トランザクション終了時にフロントエンドサーバとディクショナリサーバの接続切断処理を行います。
-
(2) 適用基準
-
フロントエンドサーバとバックエンドサーバの接続処理に掛かる時間は通常数ミリ秒〜数十ミリ秒のため,トランザクションの実行時間が短い(数十ミリ秒〜2秒くらい)システムでこの機能を使用してください。トランザクションの実行時間が長いシステムでこの機能を使用した場合,性能向上は見込まれません。
-
次に示すようなシステムでHiRDBに常時接続する場合は,バックエンドサーバが使用されないのにフロントエンドサーバとバックエンドサーバの接続を保持することがあるため,メモリ,ソケット,通信ポートなどの資源を圧迫します(それぞれの資源が常に高負荷時の資源を確保することになります)。したがって,バックエンドサーバ接続保持機能をこの環境下で使用する場合は注意が必要です。
-
トランザクションの負荷が低いシステム
-
使用するバックエンドサーバに偏りがあるシステム(極端に使用頻度の低いバックエンドサーバに対しては,バックエンドサーバ接続保持機能を使用しないでください)
-
-
HiRDB XAライブラリを使用している場合,使用するトランザクションマネジャによっては1接続が1トランザクションになります。この場合,バックエンドサーバ接続保持機能を使用しても効果がありません。使用できるXAライブラリ一覧については,マニュアル「HiRDB UAP開発ガイド」の各トランザクションマネジャが使用するライブラリ一覧を参照してください。
(3) 環境設定
バックエンドサーバ接続保持機能を使用する場合は次に示す環境設定をしてください。
-
バックエンドサーバ接続保持機能の設定
-
バックエンドサーバ接続保持時間の設定
-
クライアントの最大待ち時間の設定
-
バックエンドサーバプロセス数の設定
(a) バックエンドサーバ接続保持機能の設定
バックエンドサーバ接続保持機能を使用する場合は,次に示すどちらかのオペランドを指定してください(両方指定してもかまいません)。
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に対してはバックエンドサーバ接続保持機能が適用されます。
(b) バックエンドサーバ接続保持時間の設定
バックエンドサーバ接続保持機能を使用する場合は,バックエンドサーバ接続保持時間を指定してください。バックエンドサーバ接続保持時間を超えると,次に実行されるトランザクションの終了時にフロントエンドサーバとバックエンドサーバの接続を切断します。
- バックエンドサーバ接続保持時間の計測期間
-
バックエンドサーバ接続保持時間の計測開始時点と計測終了時点を次に示します。
-
計測開始時点:トランザクション処理が終了した時点
-
計測終了時点:次のトランザクション処理を開始した時点
バックエンドサーバ接続保持時間の計測期間とHiRDBの処理を次の図に示します。
図E‒2 バックエンドサーバ接続保持時間の計測期間とHiRDBの処理 -
- 〔説明〕
-
-
[1]の期間はバックエンドサーバ接続保持時間以内のため,FESとBES1の接続を保持します。
-
[2]の期間はバックエンドサーバ接続保持時間を超えたため,トランザクション(トランザクション3)の終了時にFESとBES2の接続を切断します。次に実行されるトランザクション(トランザクション4)の開始時に,FESとBES2の接続処理が発生します。
-
- 注意事項
-
バックエンドサーバ接続保持時間を超えた時点で,フロントエンドサーバとバックエンドサーバの接続切断処理が発生するわけではありません。その点を間違えないようにしてください。バックエンドサーバ接続保持時間を超えたときのHiRDBの処理についてまとめると,次のようになります。
-
バックエンドサーバ接続保持時間を超えたとき
HiRDBの処理は特にありません。
-
トランザクションの開始時
フロントエンドサーバとバックエンドサーバの接続は保持されているため,フロントエンドサーバとバックエンドサーバの接続処理は発生しません。
-
トランザクションの終了時
フロントエンドサーバとバックエンドサーバの接続切断処理が発生します。
-
次回のトランザクションの開始時
フロントエンドサーバとバックエンドサーバの接続処理が発生します。
-
- バックエンドサーバ接続保持時間の目安
-
-
UAPの接続時間が短いシステムの場合は,バックエンドサーバ接続保持時間に0を指定してください。
-
常時接続,UAPの接続時間が長いシステムの場合は,バックエンドサーバ接続保持時間を指定しないで,省略値(1秒)を使用してください。
-
- バックエンドサーバ接続保持時間に0を指定した場合の動作
-
バックエンドサーバ接続保持時間に0を指定した場合は,時間監視を行わないで,フロントエンドサーバとバックエンドサーバの接続を保持し続けます。ただし,「接続保持が解除される場合」で示す場合は,接続を切断します。
- バックエンドサーバ接続保持時間の指定方法
-
バックエンドサーバ接続保持時間は,次に示すどちらかのオペランドで指定します(両方指定してもかまいません)。
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が動いている状態でユティリティを実行する場合,バックエンドサーバプロセス数にはユティリティの分の余裕値を確保してください。
(4) 注意事項
(a) 定義系SQLを実行しないでください
定義系SQLを実行するUAPに対しては,バックエンドサーバ接続保持機能を使用しないでください。定義系SQLを実行するUAPに対してこの機能を使用すると,フロントエンドサーバとバックエンドサーバ間,ディクショナリサーバとバックエンドサーバ間の接続が同時に発生することがあるため,バックエンドサーバプロセス数が不足し,SQLエラーになることがあります。したがって,定義系SQLを実行するUAPのクライアント環境定義のPDBESCONHOLDオペランドにはNOを指定してください。
(b) 接続保持が解除される場合
バックエンドサーバ接続保持機能を使用している場合でも,次に示す場合はフロントエンドサーバとバックエンドサーバの接続を切断します。
-
DISCONNECT文(HiRDB XAライブラリの使用時はxa_close),PDCWAITTIMEオーバによって,フロントエンドサーバとクライアント間の接続が切断された場合
-
ロールバックした場合(内部ロールバックを含む)
-
内部的に多量のメモリを使用した場合
-
pdpfreshコマンド(-fオプションなし)を実行した場合
-
ホールダブルカーソルのカーソルをクローズした場合
-
SET SESSION AUTHORIZATION文を実行した場合
(c) バックエンドサーバ接続保持時間を超えても接続が切断されないことがあります
バックエンドサーバ接続保持時間を超えても,次に示す場合はフロントエンドサーバとバックエンドサーバの接続を切断しません。
-
ホールダブルカーソルを使用している場合
-
UAP環境定義で指定したローカルバッファを使用している場合