26.9.8 トランザクションキューイング機能
スタンバイレス型系切り替え機能を使用する場合はトランザクションキューイング機能が使用できます。
(1) トランザクションキューイング機能とは
バックエンドサーバ又はディクショナリサーバのユニットで系切り替えが発生すると,系の切り替えが完了するまでこのバックエンドサーバ又はディクショナリサーバはトランザクションを受け付けられない状態になります。そのため,系切り替え中のバックエンドサーバ又はディクショナリサーバで処理するトランザクションがエラーになります。
これらのトランザクションをエラーにしないで,系切り替えが完了するまでフロントエンドサーバでトランザクションをキューイングします。これをトランザクションキューイング機能といいます。これによって,系切り替え時のトランザクションエラーを少なくできます。トランザクションキューイング機能の概要を次の図に示します。
- 注※
-
スタンバイレス型系切り替え機能の場合は次に示すようになります。
-
正常時は正規ユニットが実行系になり,代替部が待機系になります。
-
代替中は代替部が実行系になり,正規ユニットが待機系になります。
-
- 〔説明〕
-
バックエンドサーバのユニットに障害が発生して系を切り替えます。待機系ユニットが起動完了するまで,トランザクションをキューイングします。待機系ユニットが起動完了した後にトランザクションを開始します。
- 備考
-
-
系を切り替えていない(障害が発生していない)ユニットで実行されるトランザクションはキューイングされません。通常どおり実行されます。
-
マルチフロントエンドサーバを使用すると,フロントエンドサーバのユニットで系切り替えが発生した場合,トランザクションエラーを少なくできます。この場合,障害が発生したときに実行中のトランザクションだけがエラーになります。
-
(2) 環境設定方法
トランザクションキューイング機能を使用するには次の表に示すオペランドを指定します。
オペランド名 |
説明 |
---|---|
pd_ha_agent |
高速系切り替え機能,1:1スタンバイレス型系切り替え機能,又は影響分散スタンバイレス型系切り替え機能を使用する場合に指定します。 standbyunit:高速系切り替え機能を使用します。 server:1:1スタンバイレス型系切り替え機能を使用します。 activeunits:影響分散スタンバイレス型系切り替え機能を使用します。 |
pd_ha_transaction |
トランザクションキューイング機能を使用するかどうかを指定します。 クライアント環境定義のPDHATRNQUEUINGオペランドにNOを指定すると,そのHiRDBクライアントが実行するUAPはトランザクションキューイング機能の対象外になります。PDHATRNQUEUINGオペランドについては,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。 |
pd_ha_trn_queuing_wait_time |
トランザクションのキューイング待ち時間を指定します。このオペランドに指定した待ち時間を超えても待機系ユニットが起動しない場合,キューイング中のトランザクションをエラーにします。これ以降発生するトランザクションはキューイングされないでエラーになります。 |
pd_ha_trn_restart_retry_time |
トランザクションキューイング機能使用時に系切り替えが発生すると,トランザクションをフロントエンドサーバでキューイングします。しかし,系切り替えが発生してから待機系ユニットが再開始するまでの間,フロントエンドサーバは系切り替えを検知できません。この間(系切り替えが発生してから待機系ユニットが再開始するまでの間),フロントエンドサーバは実行系ユニットに対してトランザクションの開始要求をしますが,実行系ユニットは既に異常終了しているため,このトランザクション開始要求はエラーになります。エラーになったトランザクションはフロントエンドサーバから開始要求が再度行われます(トランザクションの開始要求をリトライします)。 このオペランドには,このリトライ時間の上限を指定します。このオペランドの値を超えても待機系ユニットが再開始されない場合は,リトライ中のトランザクションをエラーにします。また,これ以降発生するトランザクションはリトライされないでエラーになります。 pd_ha_trn_queuing_wait_timeオペランドとpd_ha_trn_restart_retry_timeオペランドの関係を図「pd_ha_trn_queuing_wait_timeオペランドとpd_ha_trn_restart_retry_timeオペランドの関係」に示します。 |
- 注※
-
スタンバイレス型系切り替え機能の場合は次に示すようになります。
-
正常時は正規ユニットが実行系になり,代替部が待機系になります。
-
代替中は代替部が実行系になり,正規ユニットが待機系になります。
-
- 〔説明〕
-
- 区間A,D:
-
トランザクションを開始できる状態です(正常な状態です)。
- 区間B:
-
バックエンドサーバのユニットが系切り替え中で,フロントエンドサーバがそれを検知できていない状態です。pd_ha_trn_restart_retry_timeオペランドに指定した時間までトランザクション開始要求をリトライします。フロントエンドサーバが系の切り替えを検知すると,トランザクションがキューイングされます。指定した時間を過ぎても検知できない場合は,そのトランザクションをエラーにします。
- 区間C:
-
バックエンドサーバのユニットが系切り替え中で,フロントエンドサーバがそれを検知している状態です。pd_ha_trn_queuing_wait_timeオペランドに指定した時間までトランザクションをキューイングします。指定した時間を過ぎてもトランザクションを開始できない場合は,そのトランザクションをエラーにします。
(3) キューイングの対象になるトランザクション
SQLの延長で生成されるトランザクションがキューイングの対象になります。ただし,定義系SQLの延長で生成されるトランザクション,及びホールダブルカーソル機能を使用したトランザクションは対象外です。次に示すトランザクションはキューイングの対象になりません。
-
定義系SQLを発行するトランザクション
-
ホールダブルカーソルを開いている接続のトランザクション
-
ASSIGN LIST文を発行するトランザクション
-
運用コマンド又はユティリティが生成するトランザクション
ただし,タイミングによってはこれらのトランザクションがキューイングされることがあります。
(4) 注意事項
(a) 時間監視関連のオペランドについて
トランザクションのキューイング時間は最大で,pd_ha_trn_queuing_wait_timeオペランドの値(省略値180秒)とpd_ha_trn_restart_retry_timeオペランドの値(省略値60秒)の合計時間になります。このため,次に示すオペランドの値に注意してください。
-
クライアント環境定義のPDCWAITTIMEオペランド
系切り替え中もPDCWAITTIMEが計測されているため,系の切り替えに掛かる時間を加算してオペランドの値を決めてください。
-
pd_lck_wait_timeoutオペランド
キューイングされているトランザクションが障害の発生していないユニットで排他を確保することがあるため,系の切り替えに掛かる時間を加算してオペランドの値を決めてください。
系の切り替えに掛かる時間は,クラスタソフトウェアがsyslogfileに出力する系切り替え開始メッセージと系切り替え完了メッセージの出力時刻の差分によって求められます。系の切り替えが開始したときは次に示すどれかのメッセージが出力されます。
-
KAMN200-Iメッセージ(クラスタソフトウェアの系を切り替えるコマンド入力時に出力)
-
KAMN300-Eメッセージ(実行系HiRDBの異常終了時に出力)
-
KAMN301-Eメッセージ(実行系HiRDBのスローダウン時に出力)
系の切り替えが完了したときはKAMN311-Iメッセージが出力されます。
(b) リスト使用時の注意事項
リストを使用した検索中に系切り替えが発生した場合は注意が必要です。バックエンドサーバ又はディクショナリサーバのユニットで系切り替えが発生すると,系切り替え前のユニットで作成したリストが削除されます。そのため,系切り替え後にリストを使用した検索(キューイングされていたトランザクション)がエラーになります。この場合,リストを削除するか,又はリストを再作成してください。
(c) 最大同時接続数(pd_max_usersオペランドの値)について
トランザクションのキューイング中は処理待ちのユーザ数が通常より多くなるため,最大同時接続数(pd_max_usersオペランドの値)を超える可能性があります。最大同時接続数を超えた場合,それ以上のユーザはそのフロントエンドサーバに接続できませんが,フロントエンドサーバへの接続処理をリトライします。pd_ha_trn_queuing_wait_timeとpd_ha_trn_restart_retry_timeオペランドの合計時間だけリトライします。
(d) バックエンドサーバ接続保持機能を使用している場合
バックエンドサーバ接続保持機能を使用している場合の注意事項については,「クライアントの最大待ち時間の設定」を参照してください。