Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 システム定義


スケジュールサービス定義

〈このページの構成〉

形式

set形式

〔set scd_server_count=最大ユーザサーバ数〕
〔set scd_hold_recovery=Y|F〕
〔set scd_hold_recovery_count=閉塞状態の引き継ぎが必要なサーバ,および
                              サービスの合計数〕
〔set scd_port=スケジュールサービスのポート番号〕
〔set scd_this_node_first=Y|N〕
〔set scd_announce_server_status=Y|N〕
〔set max_socket_descriptors=ソケット用ファイル記述子の最大数〕
〔set max_open_fds=スケジュールサービスプロセスでアクセスするファイル,およびパイプの最大数〕
〔set schedule_rate=スケジュール比率〕
〔set scd_retry_of_comm_error=リトライ回数〕
〔set scd_advertise_control=BEFORE|AFTER〕
〔set scd_message_level=1|2〕
〔set ipc_tcpnodelay=Y|N〕
〔set watch_time=最大応答待ち時間〕

コマンド形式

{{scdbufgrp -g  スケジュールバッファグループ名
         {〔-e  メッセージ格納バッファプール長〕|
          〔-n  メッセージ格納バッファセル数〕}
          〔-l  メッセージ格納バッファセル長〕
         {〔-s  メッセージ格納バッファ使用制限サイズ〕|
          〔-p  メッセージ格納バッファ使用制限率〕}}}
{{scdmulti 〔-m  マルチスケジューラデーモン数〕
           〔-p  ポート番号〕
           〔-g  マルチスケジューラグループ名〕
           〔-t〕}}

機能

OpenTP1システム環境下で動作するサーバへのサービス要求のスケジューリングをするための実行環境を定義します。

スケジュールサービスはOSのメッセージ機能を使用して,スケジュールキューをサービスグループ単位に作成します。

説明

set形式のオペランド

scd_server_count=最大ユーザサーバ数

 〜〈符号なし整数〉((0〜8192))《32》

スケジュールサービスを利用して動作するユーザサーバ数の最大値を指定します。

オンライン時に,サーバ起動コマンド(dcsvstart)で起動するユーザサーバの数も含めて指定します。

ユーザサーバ数に含めるサーバはキュー受信型SPP,MHP,rapサーバ,RTSSPP,mqrsppです。

このオペランドを変更する場合は「7.3.1 ユーザサーバの追加」を参照し,定義の見直しやOpenTP1ファイルの再見積もりの必要有無を確認してください。

scd_hold_recovery=Y|F

 〜《Y》

システムを全面回復する場合に,ユーザサーバの閉塞状態を引き継ぐかどうかを指定します。

Y

ユーザサービス定義,ユーザサービスデフォルト定義のhold_recoveryオペランドの指定によって,サーバまたはサービスの閉塞状態を引き継ぎます。ただし,システム環境定義のstart_scheduling_timingオペランドにBEFOREを指定した場合は,ユーザサービス定義のhold_recoveryオペランドの指定に関係なく,閉塞状態は引き継ぎません。

F

ユーザサービス定義,ユーザサービスデフォルト定義のhold_recoveryオペランドの指定によって,サーバまたはサービスの閉塞状態を引き継ぎます。

閉塞状態のサーバまたはサービスの数がスケジュールサービス定義のscd_hold_recovery_countオペランドの指定値を超えた場合,超えた分のサーバまたはサービスの閉塞状態は引き継ぎません。またscd_hold_recovery_countオペランドに0を指定した場合も引き継ぎません。

SPPのソケット受信型サーバ,SUP,およびMHPの場合は,指定する必要はありません。scd_hold_recoveryオペランドの指定と,ユーザサービス定義,ユーザサービスデフォルト定義のhold_recoveryオペランド,システム環境定義のstart_scheduling_timingオペランド,スケジュールサービス定義のscd_hold_recovery_countオペランドの指定の関係を,次の表に示します。

各オペランドの指定値

OpenTP1の閉塞引き継ぎ処理

start_scheduling_timing

hold_recovery

scd_hold_recovery_count

scd_hold_recovery

AFTER

Y

0

×

0以外

N

0

×

0以外

×

BEFORE

Y

0

×

0以外

Y

×

F

N

0

×

0以外

×

(凡例)

○:閉塞状態を引き継ぎます。

×:閉塞状態を引き継ぎません。

−:指定できません。指定しても無視されます。

scd_hold_recovery_count=閉塞状態の引き継ぎが必要なサーバ,およびサービスの合計数

 〜〈符号なし整数〉((0〜58240))《64》

システムを全面回復するときに,閉塞状態を引き継ぐことが必要なサーバ,およびサービスの合計数を指定します(指定値は,偶数になるように切り上げられます)。

ユーザサービス定義でservice_holdオペランドにNが指定されたサーバは,一つのサーバとして数えます。service_holdオペランドにYが指定されたサーバは,そのサーバが持つサービス数を数えて合計数を指定してください。ただし,service_holdオペランドにYが指定されていても,ユーザサービス定義でholdオペランドにNが指定され,かつservice_term_watch_timeオペランドに0が指定された場合は,一つのサーバとして数えます。

閉塞状態のサーバ,またはサービスの数がこの指定値を超えた場合,超えた分のサーバ,またはサービスの閉塞状態は引き継がれません。0を指定した場合も引き継がれません。

システムを全面回復するとき,前回のオンライン処理のときに指定した値が引き継がれます。ただし,前回,または今回の指定値が0の場合は,指定値は引き継がれません。

0以外を指定した場合は,閉塞情報がステータスファイルに格納されるので,指定値に応じてステータスファイルの容量を見積もる必要があります。指定値が小さいと,ステータスファイル内で閉塞情報の書き換え処理が多く発生します。

TP1/Server Baseのバージョンが07-07以前の場合は,このオペランドの指定値によって,システム共通定義のrpc_max_message_sizeオペランドの指定値を変更する必要がある場合があります。次の計算式の算出値が1より大きい場合(2〜8の場合)は,算出値以上の値をrpc_max_message_sizeオペランドに指定してください。

↑scd_hold_recovery_countオペランドの指定値/7280↑

↑↑:小数点以下を切り上げます。

rpc_max_message_sizeオペランドの指定値を変更する場合は,rpc_max_message_sizeオペランドの説明を参照してください。

scd_port=スケジュールサービスのポート番号

 〜〈符号なし整数〉((5001〜65535))

スケジュールサービスのポート番号を指定します。

このオペランドの指定を省略した場合,システムが任意に割り当てたポート番号で起動します。

このオペランドで指定するポート番号は,ほかのプログラムと重複しないようにしてください。

また,OSには任意に割り当てる番号がありますが,この番号も使用しないでください。OSが任意に割り当てる番号は,OSの種別やバージョンによって異なります。詳細については,使用しているOSのマニュアルを参照してください。

scd_this_node_first=Y|N

 〜《N》

要求されたサーバが自ノードにある場合に,自ノードのサーバを優先してスケジュールするかどうかを指定します。

Y

要求されたサーバが自ノードにある場合には,自ノードのサーバを優先してスケジュールします。

サーバが自ノードにない場合や,スケジュールできない状態(過負荷状態や閉塞状態など)の場合には,他ノードのサーバをスケジュールします。

N

要求されたサーバが自ノードにある場合でも,自ノードのサーバを優先しないで,ランダムにノードを選択してスケジュールします。

このオペランドでYを指定し,scd_announce_server_statusオペランドでNを指定すると,自ノードのサーバがスケジュールできる状態なら,負荷状態に関係なく,必ず自ノードでスケジュールします。

scd_announce_server_status=Y|N

 〜《Y》

自ノードのサーバの状態を,すべての他ノードに不定期で通知するかどうかを指定します。ノード間で負荷バランスを取る場合に指定します。

Y

自ノードのサーバの状態を,すべての他ノードに不定期(30秒以上の任意の間隔)で通知します。

N

自ノードのサーバの状態を,他ノードに通知しません。

このオペランドでYを指定すると,同一サービスグループが複数ノードにある場合に,サーバの状態をノード間で通知し合うことで,負荷を考慮したノード間の負荷バランスが取れます。ただし,次のような場合には,Nを指定してください。

  • サービスグループが一つのノードで起動している場合

  • 負荷を考慮しないで,ランダム選択でノード間の負荷バランスを取る場合

なお,このオペランドの指定は,分散処理するすべてのノードで同じにしてください。指定が異なるノードがあると,負荷が集中することがあります。

max_socket_descriptors=ソケット用ファイル記述子の最大数

 〜〈符号なし整数〉((32〜2032))

OpenTP1制御下のプロセス※1でのソケット用に使用するファイル記述子の最大数を指定します。

指定値の範囲は,適用OSがAIX,HP-UXまたはWindowsの場合は32〜2032,適用OSがSolarisまたはLinuxの場合は32〜1008です。

OpenTP1制御下のプロセス※1は,システムサーバやユーザサーバとの間で,ソケットを使用したTCP/IP通信でプロセス間の情報交換をしています。そのため,同時に稼働するUAPプロセスの数,および通信する他ノードの数によって,このオペランドを変更する必要があります。

このオペランドには,次の条件を満たす値を指定してください。

(「このオペランドの指定値」+同定義内の「max_open_fdsオペランドの指定値」)≦2048※2

条件を満たさない値を指定した場合は,このオペランドの指定値は次に示すように強制的に補正されます。

(「このオペランドの指定値」+同定義内の「max_open_fdsオペランドの指定値」)=2048※2
注※1

MCFサービス(MCFマネジャサービス,MCF通信サービス,およびアプリケーション起動サービス)以外のOpenTP1プロセスが対象です。MCFサービスの場合は,「システムサービス情報定義」および「システムサービス共通情報定義」を参照してください。

注※2

適用OSがAIX,HP-UXまたはWindowsの場合は2048,適用OSがSolarisまたはLinuxの場合は1024です。

ソケット用ファイル記述子の最大数の算出式を,次に示します。

(全UAPプロセス数※1+スケジュールサービスを要求してくるノード数※2+システムサービスプロセス数※3)/0.8

↑↑:小数点以下を切り上げます。

注※1

全UAPプロセス数は,次に示す値の合計です。

  • 自OpenTP1内のUAPプロセス数

  • 自OpenTP1内のサービスを利用する,他ノード内のUAPプロセス数

  • CUPから同時に起動するトランザクション数(クライアントサービス定義のparallel_countオペランドの指定値)

注※2

スケジュールサービスを要求してくるノード数とは,次に示す値の合計です。ただし,重複する場合は一つ分だけ加算してください。

  • 自OpenTP1のall_nodeオペランドに指定したノード名の数

  • 自ノード名を,OpenTP1のall_nodeオペランドに指定している,他ノードの数

注※3

システムサービスプロセス数とは,自OpenTP1内のシステムサービスプロセスの数です。自OpenTP1内のシステムサービスプロセスは,rpcstatコマンドで表示されるサーバ名をカウントすることで求められます。rpcstatコマンドで表示されるサーバ名のうち,マニュアル「OpenTP1 解説」のOpenTP1のプロセス構造に記載されているシステムサービスプロセスをカウントしてください。

このオペランドの指定が小さいと,OpenTP1制御下の他プロセスとのコネクションが設定できなくなるため,プロセスがKFCA00307-Eメッセージを出力して異常終了します。

指定値の優先順位は次のとおりです(1.>2.)。

  1. スケジュールサービス定義

  2. システム共通定義

ここで指定を省略した場合,システム共通定義の値を仮定します。

max_open_fds=スケジュールサービスプロセスでアクセスするファイル,およびパイプの最大数

 〜〈符号なし整数〉((16〜2016))《50》

スケジュールサービスプロセスで使用するファイルおよびパイプの最大数を指定します。

指定値の範囲は,適用OSがAIX,HP-UXまたはWindowsの場合は16〜2016,適用OSがSolarisまたはLinuxの場合は16〜992です。

スケジュールサービスでアクセスするファイルおよびパイプの最大数の計算式を,次に示します。

ステータスサービス定義で指定したOpenTP1ファイルシステム数+20+N
(N:ユーザサービス定義のschedule_methodにnamedpipeを指定したユーザサーバ数)

このオペランドには,次の条件を満たす値を指定してください。

(「max_open_fdsオペランドの指定値」+「max_socket_descriptorsオペランドの指定値」)≦2048
注※

適用OSがAIX,HP-UXまたはWindowsの場合は2048,適用OSがSolaris またはLinuxの場合は1024です。

schedule_rate=スケジュール比率

 〜〈符号なし整数〉((50〜100))(単位:%)

TP1/Client/WまたはTP1/Client/Pのクライアント環境定義のDCSCDDIRECTオペランドにYを指定して,RPCをスケジューリングする際,サーバの負荷レベルがLEVEL0,およびLEVEL1のノードのうち,LEVEL0のノードへのスケジュール比率を指定します。

なお,この機能は,TP1/Extension 1をインストールしていることが前提です。TP1/Extension 1をインストールしていない場合の動作は保証できませんので,ご了承ください。

scd_retry_of_comm_error=リトライ回数

 〜〈符号なし整数〉((0〜128))《0》

サービス要求のスケジューリング時に通信障害が発生したとき,障害ノード以外へスケジューリングするリトライ回数を指定します。ただし,このオペランドの指定値が,サービス要求の対象となるサービスグループが起動しているノード数を上回っている場合は,サービス要求の対象となるサービスグループが起動しているノード数をリトライ回数の上限値とします。

0を指定した場合は,リトライしません。

なお,この機能は,TP1/Extension 1をインストールしていることが前提です。TP1/Extension 1をインストールしていない場合の動作は保証できませんので,ご了承ください。

scd_advertise_control=BEFORE|AFTER

 〜《BEFORE》

システム共通定義のall_nodeオペランドに指定されたノードに対し,ユーザサーバ起動時にネーム情報を通知するタイミングを変更します。

BEFORE

ユーザサーバの起動処理中(オンライン前)に,システム共通定義のall_nodeオペランドに指定されたOpenTP1ノードに対してネーム情報を通知します。

AFTER

ユーザサーバ起動完了直後に,システム共通定義のall_nodeオペランドに指定されたOpenTP1ノードに対してネーム情報を通知します。

また,OpenTP1の開始処理,または再開始処理で起動されるユーザサーバについては,スケジュールサービスが開始されるタイミングで起動されているユーザサーバのネーム情報をまとめて通知します。ただし,システム環境定義のstart_scheduling_timingオペランドにBEFOREを指定すると,OpenTP1の開始処理,または再開始処理では,ユーザサーバが起動される前にスケジュールサービスが開始されるため,通知されるネーム情報はなくなります。

このオペランドにAFTERを指定した場合,OpenTP1の開始処理,または再開始処理で起動されるユーザサーバ数が多いと,システム共通定義のall_nodeオペランドに指定されたOpenTP1ノードに対してまとめて通知するネーム情報量が増え,マシンおよびネットワークの負荷が一時的に高くなることがあります。

scd_message_level=1|2

 〜《2》

このオペランドに1を指定すると,メッセージ格納バッファプールのメモリ不足が発生した場合に出力されるKFCA00854-Eメッセージの出力を抑止できます。

ipc_tcpnodelay=Y|N

 〜《Y》

OpenTP1がノード間で使用する通信ソケット(INETドメイン)に,TCP_NODELAYオプションを使用するかどうかを指定します。

TCP_NODELAYオプションを使用すると(このオペランドにYを指定すると),Nagleアルゴリズムが無効になるので,送信済みデータの応答待ちの状態でも遅延させることなくデータを送信できます。ただし,TCP_NODELAYオプションを使用することで,INETドメイン通信時の送信効率が低下し,ネットワークの負荷が大きくなる場合があります。この場合は,ネットワークの帯域などを考慮してipc_sendbuf_sizeオペランド,ipc_recvbuf_sizeオペランドのチューニングを検討するか,このオペランドにNを指定してTCP_NODELAYオプションを無効にするかを検討してください。

watch_time=最大応答待ち時間

 〜〈符号なし整数〉((0〜65535))(単位:秒)

RPCによってプロセス間で通信する場合,サービス要求を送信してからサービスの応答が返るまでの待ち時間の最大値を指定します。

OpenTP1の終了処理で,このオペランドで指定した時間だけ終了処理を待ち合わせる場合があります。したがって,大きな値を指定した場合,OpenTP1の終了処理に時間が掛かる場合があります。

指定時間を過ぎても応答がない場合は,RPCは送受信タイムアウトとしてエラーリターンします。

0を指定した場合は,応答を受信するまで待ち続けます。0を指定した場合,OpenTP1が終了しない場合があります。

省略した場合は,システム共通定義のwatch_timeオペランドの値を仮定します。

このオペランドは,システム共通定義のwatch_timeオペランドのデフォルト値で使用してください。

特別なチューニングを必要とする場合以外は,このオペランドの内容を変更しないことをお勧めします。

システム共通定義のwatch_timeオペランドのデフォルト値よりも,極端に小さな値または大きな値を指定すると,OpenTP1ダウンに至る障害が発生する場合がありますので,ご注意ください。

コマンド形式

次ページ以降に記述しています。