8.8.1 シンクポイントダンプ有効化のスキップ回数監視機能の概要
UAPが無限ループしてデータベースを更新し続けるとシンクポイントが有効化できないため,上書きできない状態のシステムログファイルが増えてしまいます。上書きできない状態のシステムログファイルが増えて全システムログファイルが上書きできない状態になると,HiRDBが異常終了します。
また,上書きできない状態のシステムログファイルが,全システムログファイルの半分以上になったときにHiRDBが異常終了又は強制終了すると,HiRDBを再開始するときのロールバック処理でシステムログファイルが不足します。この場合,システムログファイルを新規追加しないと,HiRDBを再開始できません。そして,この再開始処理に要する時間も長くなります。
このようなことを防ぐために,HiRDBではシンクポイントダンプ有効化のスキップ回数監視機能を設けています。
- 〈この項の構成〉
-
(1) シンクポイントダンプ有効化のスキップ回数監視機能とは
UAPの無限ループなどが発生すると,シンクポイントダンプの有効化処理が連続してできないことがあります(シンクポイントダンプの有効化処理が連続してスキップされることがあります)。このスキップ回数がある一定の回数に達した場合,対象トランザクションを強制的に中断してロールバック処理を行います。これをシンクポイントダンプ有効化のスキップ回数監視機能といいます。この機能を使用する場合はpd_spd_syncpoint_skip_limitオペランドを指定します。
(2) pd_spd_syncpoint_skip_limitオペランドに指定する値
通常はpd_spd_syncpoint_skip_limitオペランドに0を指定してください。0を指定すると,スキップ回数の上限値をHiRDBが自動計算します。0を指定して不都合が発生した場合は,(3)に示すどちらかの方法でこのオペランドの値を計算してください。
次に示す条件を一つでも満たす場合は,自動計算よりも(3)の方法で計算した方が,精度が高くなります。
-
現用ファイルとして使用可能なシステムログファイルが5世代以下である
-
処理時間が掛かるトランザクションを並列実行する
-
反映側HiRDBのデータ反映トランザクション処理に時間が掛かる(HiRDB Datareplicatorとの連携時)
KFPS02101-Iメッセージが出力される場合は,自動計算をやめて(3)の方法で計算してください。
次に示す場合は,自動計算で算出されたスキップ回数の上限値で運用を続行するかどうか検討してください。自動計算をやめる場合は,「出力されるシステムログ量から計算する方法」に示す方法で計算してください。
-
上書きできない状態のシステムログファイルのシステムログ量(HiRDBを再開始するときに読み込むシステムログ量)が,スキップしている間に増加して,HiRDBの再開始処理に要する時間が長くなる場合
なお,この場合,HiRDBの再開始処理時間を短縮するために,補正してから自動計算します(KFPS02103-Iメッセージが出力されます)。
-
自動計算で算出されたスキップ回数の上限値が100,000回を超える場合
なお,この場合,100,000回を仮定します(KFPS02103-Iメッセージが出力されます)。
(3) 計算方法
計算方法には次に示す二つの方法があります。どちらかの方法で計算してください。
-
出力されるシステムログ量から計算する方法
-
全システムログファイルの容量から計算する方法
ここで求めた値より多少小さい値をpd_spd_syncpoint_skip_limitオペランドに指定してください。
(a) 出力されるシステムログ量から計算する方法
次に示す計算式から求めます。
- 〈計算式〉
-
{(↑a÷b↑÷c)÷d}−1
- a:
-
データベースの更新量が最も多いトランザクション処理で出力されるシステムログ量と,このトランザクションが稼働中に同時実行するトランザクション処理で出力されるシステムログ量の合計です(単位:バイト)。システムログ量の求め方については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
●HiRDB Datareplicatorを使用している場合
反映側HiRDBのデータ反映トランザクション処理に時間が掛かる場合,この機能によって反映側HiRDBがデータ反映トランザクションをロールバックすることがあります。したがって,データ反映トランザクション処理で出力されるシステムログ量を加算する必要があります。次に示す計算式で求めた値を加算してください。
データ反映トランザクション処理で出力されるシステムログ量
=Σ(データベースの更新量が最も多いトランザクション処理で出力されるシステムログ量)
ΣはHiRDB Datareplicatorの反映環境定義のcmtintvl(trncmtintvl,tblcmtintvl)オペランドに指定したトランザクション数分の合計を意味しています。
- b:
-
システムログファイルのレコード長です。レコード長はpdloglsコマンドで調べられます。
- c:
-
システムログブロックの平均レコード数です。通常,3×4096÷b程度を目安にしてください。なお,次に示す計算式から正確に求められます。
↑システムログ出力ブロック長の平均値÷b↑
システムログ出力ブロック長の平均値は,統計解析ユティリティのシステムの稼働に関する統計情報(OUTPUT BLOCK LENGTH)から分かります。
- d:
-
pd_log_sdintervalオペランドの第1パラメタ(シンクポイントダンプの取得間隔をシステムログの出力量で指定)の値です。
(b) 全システムログファイルの容量から計算する方法
次に示す計算式から求めます。
- 〈計算式〉
-
{(a×b×c)÷d}÷e
- a:
-
HiRDBの稼働中に,スワップ先にできる状態にできるシステムログファイル数です。
- b:
-
システムログファイルのレコード数です。レコード数が各ファイルで異なる場合は平均値を求めてください。
- c:
-
シンクポイントダンプの有効化をスキップしてよい割合です。全システムログファイルに対して,上書きできない状態にしてよいファイルの割合を代入します。
-
HiRDB/シングルサーバの場合は0.333以下の値にしてください。有効保証世代数が2の場合は0.167以下の値にしてください。
-
バックエンドサーバの場合は0.333以下の値にしてください。有効保証世代数が2の場合は0.167以下の値にしてください。
-
ディクショナリサーバの場合は0.5程度にしてください。
-
フロントエンドサーバの場合は0.7程度にしてください。
-
- d:
-
システムログブロックの平均レコード数です。通常,3×4096÷f程度を目安にしてください。なお,次に示す計算式から正確に求められます。
↑システムログ出力ブロック長の平均値÷f↑
システムログ出力ブロック長の平均値は,統計解析ユティリティのシステムの稼働に関する統計情報(OUTPUT BLOCK LENGTH)から分かります。
- e:
-
pd_log_sdintervalオペランドの第1パラメタ(シンクポイントダンプの取得間隔をシステムログの出力量で指定)の値です。
- f:
-
システムログファイルのレコード長です。レコード長はpdloglsコマンドで調べられます。
(4) pd_spd_syncpoint_skip_limitオペランドの値を確認する方法
稼働中のHiRDBが適用しているシンクポイントダンプ有効化のスキップ回数の上限値は,pdlogls -d spdコマンドで確認できます。pdlogls -d spdコマンドについては,マニュアル「HiRDB コマンドリファレンス」を参照してください。
(5) pd_spd_syncpoint_skip_limitオペランドに指定する値が適切でないと
指定値が大き過ぎると,全システムログファイルが上書きできない状態になる可能性があります。この場合,HiRDBは異常終了します。このとき,新規のシステムログファイルを追加しないと,HiRDBを再開始できません。
指定値が小さ過ぎると,強制的にロールバックされるトランザクションが増える可能性があります。
(6) シンクポイントダンプ有効化のスキップ回数監視機能を使用してはいけない場合
次に示す場合は,シンクポイントダンプ有効化のスキップ回数監視機能を使用しないでください。
-
大量更新のバッチ処理で,commit文を発行するまでに出力されるシステムログ量が,全システムログファイルの合計容量の1/3以上となる場合
-
データベースの更新量が最も多いトランザクションで出力するシステムログ量と,このトランザクションが稼働中に同時実行するトランザクションで出力するシステムログ量の合計が,全システムログファイルの合計容量の1/3以上となる場合
-
100,000回を超えるシンクポイントダンプの有効化スキップ回数を監視する場合
なお,システムログ量の求め方については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
(7) ロールバックの対象にならないトランザクション
シンクポイントの連続スキップ回数がpd_spd_syncpoint_skip_limitオペランドに指定した値を超えても,次に示すトランザクションはロールバックの対象とはなりません。
-
既にロールバック中のトランザクション
-
OpenTP1からのcommit2相目決着指示待ちのトランザクション
-
ユティリティが生成したトランザクション
(8) スキップ回数にカウントされないケース
次に示す場合に実施されるシンクポイントダンプの有効化処理がスキップされたときは,そのスキップは連続スキップ回数としてカウントされません。
-
前回のシンクポイントダンプ有効化から,pd_log_sdintervalオペランドで指定した時間が経過した場合
-
pdlogswapコマンドを実行してシステムログファイルをスワップした場合
-
pdlogsyncコマンドを実行した場合
- 参考
-
これらの場合,連続スキップ回数としてはカウントされませんが,KFPS02179-Iメッセージに表示される「シンクポイントダンプ取得契機を無視した回数の累計」にはカウントされます。
(9) 注意事項
HiRDBの稼働中にpdlogswapコマンドを連続して実行すると,上書きできない状態のシステムログファイルが増えてしまうため,現用として使用可能なシステムログファイルが少なくなります。このため,システムログファイル不足によるユニットの異常終了が起こり易くなります。
(10) HiRDB Datareplicatorを使用している場合の注意事項
反映側HiRDBのデータ反映トランザクション処理に時間が掛かる場合,シンクポイントダンプ有効化のスキップ回数監視機能によってデータ反映トランザクションを強制的にロールバックすることがあります。このとき,反映側HiRDBではKFPS00993-I(REQUEST= abnormal_tran_end)メッセージを出力し,反映側HiRDB DatareplicatorではKFRB03007-Wメッセージ及びKFRB03013-Iメッセージを出力します。このときの対処方法を次に示します。
- 〈手順〉
-
-
pdstopコマンドで反映側HiRDBを正常終了します。※
-
pd_spd_syncpoint_skip_limitオペランドの値を変更します。指定値については,「出力されるシステムログ量から計算する方法」を参照してください。
-
システムログファイルの世代数が次に示す条件式を満たすかどうかを確認してください。満たさない場合は,この条件式を満たすようにシステムログファイルを追加してください。
変更後のpd_spd_syncpoint_skip_limitオペランドの値≦システムログファイルの世代数÷3
-
pdstartコマンドで反映側HiRDBを正常開始します。
-
反映側HiRDB Datareplicatorのhdsrfctlコマンドで,データ反映トランザクションを再度実行します。
- 注※
-
システム構成変更コマンド(pdchgconfコマンド)を使用すると,HiRDBの稼働中にHiRDBシステム定義を変更できるため,HiRDBを正常終了する必要がありません。ただし,このコマンドを使用する場合はHiRDB Advanced High Availabilityが必要になります。HiRDBの稼働中にHiRDBシステム定義を変更する方法については,「HiRDBの稼働中にHiRDBシステム定義を変更する方法(システム構成変更コマンド)」を参照してください。
-
シンクポイントダンプ有効化のスキップ回数監視機能によってデータ反映トランザクションが強制的にロールバックされるときの流れを次の図に示します。