JP1サポート技術者ブログ

JP1サポート技術者ブログ>【JP1/AJS3】組み込みDBの無効領域を解消してジョブ遅延を予防しよう

  • ジョブ管理
2018.06.22

【JP1/AJS3】組み込みDBの無効領域を解消してジョブ遅延を予防しよう

JP1/AJS3-Managerをご利用中、組み込みDBに「無効領域」が発生することをご存知でしょうか?

JP1/AJS3は、組み込みDBと呼ばれるデータベースを使用しています。JP1/AJS3を運用していると、内部でデータの追加や削除などの更新がなされていますが、更新が繰り返されると組み込みDB内に断片化した空き領域(無効領域)が発生します。この無効領域を放置すると、データベースのアクセス性能が悪化しジョブが遅延したり、必要以上にデータベースの領域を使用し、結果としてジョブが異常終了するという問題を引き起こす恐れがあります。

そこで今回は、無効領域の増加によって発生し得る3つの問題と、無効領域のメンテナンス方法をご紹介します。

無効領域の増加によって発生する3つの問題

1. ジョブ遅延

JP1/AJS3-Managerは、ジョブの定義情報や実行結果・実行状態などの情報を組み込みDB内に格納します。

組み込みDB内に無効領域が発生している場合、この情報がデータベース内に効率的に格納されず、ジョブが実行中になるまでに時間がかかったり、ジョブ終了時などの状態遷移に時間がかかってしまいます。また、本事象はジョブの状態遷移に時間がかかるだけで、異常終了はしません。そのため、ジョブが遅延していることに気づくのが遅れ、終了予定時刻になってもジョブが終わっていない、などの問題が発生する可能性があります。

無効領域が増えるとデータベースのアクセス性能が低下し、ジョブが遅延することがあります。
※図は、無効領域を表すためのイメージになります。

なお、無効領域は急に増えることはなく、徐々に増えます。そのため、ジョブが実行するまでに、はじめは数ミリ秒程度の遅延から、数秒、数十秒という遅延に繋がります。


2. 組み込みDB領域不足によるジョブの異常終了

JP1/AJS3-Managerの組み込みDBには、データベースがFULLになった際に、自動で領域を増やす機能「自動増分機能」があります。この 「自動増分機能」を利用しない 設定としている場合、データベース容量がFULLになった際にデータを格納することができず、その結果ジョブが異常終了します。また、組み込みDB内の無効領域が増加し続けると、無駄にデータベースの領域を利用するため、設計時の見積もりよりも多くの領域を使用し、想定外にデータベース容量がFULLになることがあります。

※「自動増分機能」は、JP1/AJS3-Managerのインストール時に設定します。デフォルトは「自動増分機能」が【有効】となっています。本機能の設定確認方法は、「【無効領域のメンテナンス方法】その1. 組み込みDB自動増分機能の確認」をご参照ください。

※図は、無効領域を表すためのイメージになります。

データベース領域が80%、90%、100%になると、以下のメッセージがWindowsのイベントログや、UNIXのsyslogに出力されます。

KFPH00211-I
RDAREA usage aaa%, RDAREA = "bb....bb"cc....cc (L)
aaa:次のうち,どれかが出力されます。
RDエリアの最終ファイルの使用セグメント相対位置
RDエリア全体のセグメント使用率
RDエリア全体の使用セグメント相対位置
bb....bb:該当するRDエリア名称
cc....cc:セグメント使用率追加情報, dd....dd segments unused

このメッセージは、組み込みDB内の無効領域が増えている可能性を表します。ジョブの異常終了などのトラブルを未然に防ぐためには、80%のメッセージが出力された時点で、無効領域を解消する必要があります。(90%を超えたタイミングでは、作業に必要な空き領域を確保できずに、無効領域を解消するコマンドが実行できなかった事例があります。)

無効領域の解消方法は、「【無効領域のメンテナンス方法】その3. 無効領域を解消する」をご参照ください。


3. ディスク領域不足によるジョブの異常終了

JP1/AJS3-Manager組み込みDBの 「自動増分機能」を利用する 設定としている場合、ディスク容量がなくなるまでデータベース領域が自動的に拡張されます。組み込みDB内の無効領域が増加するなどして自動的にデータベース領域が拡張され続けた結果、ディスクがFULLとなり、ジョブの異常終了を引き起こします。

※図は、無効領域を表すためのイメージになります。

なお、データベースが拡張するたびに、以下のメッセージがWindowsのイベントログや、UNIXのsyslogに出力されます。このメッセージが出力され続けた場合、無効領域が原因でデータベースが拡張されている可能性があります。

KFPH22024-W
Extension completed in RDAREA "aa....aa",FILE "bb....bb",ccccc(dd....dd) segments created (L)
aa....aa:データベース領域名
bb....bb:ファイル名(ファイル名が113文字以上の場合は,後ろから112文字だけを出力します)
ccccc:増分したセグメント数
dd....dd:総セグメント数


無効領域のメンテナンス方法

1. 組み込みDB自動増分機能の確認

JP1/AJS3-Managerの組み込みDBは、インストール時に自動増分の設定ができます。デフォルトでは、インストーラーにて「自動増分機能」を【有効】としています。デフォルト設定で構築した後に【無効】へと変更するには、データベースの再構築が必要です。

自動増分機能の設定状況は、以下ログファイルから確認します。

■WIndowsの場合
C:\ProgramData\Hitachi\jp1\jp1_default\JP1AJS2\log\embdb\ajsembdbbuild_JFxx.log

■UNIX系の場合
/var/opt/jp1ajs2/log/embdb/ajsembdbbuild_JFxx.log

※xxには、構築時に指定したデータベース指示子が表示されます。

出力例は以下です。

[EmbedDB SETUP START] -s -d “C:\Program Files (x86)\HITACHI\JP1AJS2・・・・・・ -ext_db -ext_log

上記出力例のように、「ajsembdbbuild」コマンド実行時のオプションに「-ext_db」が含まれていた場合は、自動増分機能が有効です。


2. 無効領域の確認

無効領域の発生を確認するには、「ajsembdbstatus」コマンドを実行します。コマンド結果の「空きセグメント数(Unused Segment)」が 少なく 、「空きページ数(Collect Prearranged Page)」が 多い 場合、無効領域が多く発生していることを表します。

コマンドの実行例と実行結果は、下記を参照してください。

●コマンド実行例
[Windowsの場合]
> "C:\Program Files (x86)\Hitachi\JP1AJS2\tools\ajsembdbstatus" -db -d -id _JF0

[UNIX系の場合]
# /opt/jp1ajs2/tools/ajsembdbstatus -db -d -id _JF0

実行結果より、空きセグメント数の確認する方法

                    <前略>
RD Area Name : AJS2DATA
Server : ajs2
Total Segment : 301 Segment Size : 10 Pages
Unused Segment: 0 Page Size : 30720 Bytes
History1 Hold Status : Hold Code : 0 Hold Time :
History2 Hold Status : Hold Code : 0 Hold Time :
------------------------------------------------------------------
                    <中略>
RD Area Name : AJS2INDX
Server : ajs2
Total Segment : 904 Segment Size : 10 Pages
Unused Segment: 5 Page Size : 4096 Bytes
History1 Hold Status : Hold Code : 0 Hold Time :
History2 Hold Status : Hold Code : 0 Hold Time :
------------------------------------------------------------------
                    <後略>

上記のように「Unused Segment」の値が1桁台など極端に小さい場合は、空きセグメントが少ないと判断します。

【実行結果より、空きページ数の確認する

                    <前略>
Table Name : AJS1BODY
Auth Id : root
Status :
Reference Pending Status :
Check Pending Status :
Segment Reuse : 18 segments
<Base row segment>
Search Mode : INS
Reuse Search Failure : 222/ 223
Used(Full) Used( Full) Sum
Segment 0%( 0%) 241( 218) 241
Page 0%( 0%) 2409( 2202) 2410
Collect On Segment : 0
Collect Prearranged Page : 254
                    <後略>

上記のように、「Collect Prearranged Page」の値が3桁に達しているなど大きい場合は、空きページ数が多いと判断します。


3. 無効領域を解消する

増えてしまった無効領域を解消するためには、組み込みDBのメンテナンスコマンド「ajsembdbreclaim」を実行します。なお、このコマンドは1日1回、ジョブ実行が少ない時間帯での実行を推奨しています。

※「ajsembdbreclaim」コマンドは、JP1/AJS3-Managerサービス起動中に実行できます(サービス停止は不要)。日々実行するジョブに組み込んで実行することもできます。

●コマンド実行例
[Windowsの場合]
> "C:\Program Files (x86)\Hitachi\JP1AJS2\tools\ajsembdbreclaim" -m manager

[UNIX系の場合]
# /opt/jp1ajs2/tools/ajsembdbreclaim -m manager

「ajsembdbreclaim」コマンドの実行により、無効領域が解消され、ジョブの遅延等のトラブルを未然に防ぐことが可能になります。


4. まとめ

今回はJP1/AJS3-Managerの無効領域発生についてご紹介しました。データベースに無効領域が発生していることはコマンドを実行しないと確認できず、ジョブ遅延などの問題が発生して初めて気がつくケースがほとんどです。トラブルを未然に防ぐためにも、毎日1回、「ajsembdbreclaim」コマンドを実行するようにして無効領域を解消するようにしましょう。

製品正式名称/略称標記 および機能対象バージョン

JP1/Automatic Job Management System 3 - Manager/JP1/AJS3-Manager

執筆者情報

2007年アシストに入社し一貫してJP1の顧客サポートを担当。「JP1サポート技術者ブログ」の編集リーダー。「JP1認定シニアコンサルタント」の資格保有者。このブログでは、知って便利な情報を紹介したいと思います。

休みの日は、家族の食事を毎食作り、子どもの世話をしています。

本田 祐次

関連している記事

  • ジョブ管理
2018.04.26

【JP1/AJS3】ジョブがキューイングする5つの原因と対処方法

JP1/AJSのジョブが、時間になっても開始されなかった経験はありませんか?今回は、JP1ジョブが「キューイング状態」となる5つの原因と対処方法をご紹介します。

  • ジョブ管理
2018.01.17

【JP1/AJS3】JP1からだとバッチが実行できない!?

Windows版JP1/AJS3でバッチジョブが実行出来ない場合があります。その場合の対処方法を、OSとの環境の違いから解説します。

  • ジョブ管理
2017.07.05

【JP1/AJS3】開始時刻が過ぎてしまったジョブを実行中止にする方法

トラブル対応やメンテナンスなどで、JP1/AJS3-Managerのサービスを再起動した後に、開始時刻が過ぎてしまっているジョブの実行を抑止する方法です。

ページの先頭へ戻る