15.14.3 ISAMデータベースを再編成する

ISAMデータベースは,データの実体を格納する「データファイル」と,アクセスを高速化できるように,データへのインデクスを管理する「キーファイル」から成り立っています。ISAMでは,レコードを削除すると無効領域になるだけで,ファイルサイズが自動的に縮小することはありません。また,データファイル中の無効領域は再利用されますが,ISAMファイルのキー再利用機能を有効にしていない場合,キーファイル中の無効領域は再利用の対象になりません。JP1/AJS2 07-00以降で,新規にISAMデータベースをセットアップした場合は,キー再利用機能が有効になっています。JP1/AJS2 06-71より前のバージョンからバージョンアップした場合は,キー再利用機能を有効にすることをお勧めします。

ISAMデータベースを使用すると,日々の運用で占有量が増えてしまうファイルサイズの問題と,ファイルサイズの肥大化およびフラグメンテーション化による業務実行性能劣化の問題が発生します。

また,突然の電源ダウンなどで強制停止された場合,ISAMファイルのインデクスが不整合となるおそれがあります。

これらの問題は,業務の規模や処理量に応じて,適切な時期にISAMデータベースを再編成することで,アクセス性能の確保,ディスクの有効利用,障害発生後の不整合状態からの回復などを解決することができます。

なお,JP1/AJS2 - Agentには,JP1/AJS2のデータベースがないため,再編成を実行する必要はありません。

ここでは,個々のデータベース種別ごとの再編成方法について説明します。

注意事項
  • メンテナンスモードおよび自動再編成スクリプト(ajsautocondおよびjpqautocond)による再編成
    対象の物理ホストまたは論理ホストの作業ディレクトリがあるドライブ,またはパーティションに,再編成対象のスケジューラーデータベースおよびジョブ実行環境データベースのISAMファイルの中で最もサイズが大きいファイルの2倍程度の空き容量が必要です。再編成時には,次のディレクトリを作業ディレクトリとして使用します。
    Windowsの場合
    ジョブ実行環境のマネージャープロセス実行時のワークフォルダおよび各スケジューラーサービスの一時ファイル用フォルダ
    UNIXの場合
    WorkPathパラメーターに指定したマネージャープロセス実行時のワークディレクトリおよび各スケジューラーサービスのAJSTMPDIRパラメーターに指定したテンポラリーファイル用ディレクトリ

    また,スケジューラーデータベースディレクトリおよびジョブ実行環境データベースディレクトリがあるドライブ,またはパーティションに,再編成対象のスケジューラーデータベースおよびジョブ実行環境データベースのISAMファイルの中で最もサイズが大きいファイルと同程度の空き容量が必要です。
  • ajsdbcondコマンドおよびjpqdbcondコマンドによる再編成
    ファイルをバックアップして保存した上で,再編成を実施してください。ajsdbcondコマンドおよびjpqdbcondコマンドは,-dオプションで指定したディレクトリを作業ディレクトリとして使用します。-dオプションを指定しない場合は,OSの標準的なワークディレクトリを使用します。JP1/BaseのJiscondコマンドについての説明を参照してください。
    なお,ajsdbcondコマンドおよびjpqdbcondコマンドを実行する場合,次の条件を満足する必要があります。
    ・作業ディレクトリがあるドライブまたはパーティションに,再編成対象のスケジューラーデータベースおよびジョブ実行環境データベースのISAMキーファイルの中で最もサイズが大きいキーファイルの2倍程度の空き容量がある。
    ・スケジューラーデータベースおよびジョブ実行環境データベースのデータベースディレクトリがあるドライブまたはパーティションに,再編成対象のスケジューラーデータベースおよびジョブ実行環境データベースのISAMファイルの中で最もサイズが大きいファイルと同程度の空き容量がある。
<この項の構成>
(1) メンテナンスモード(jajs_maintainコマンド)によるISAMデータベースの再編成
(2) スケジューラーデータベース(ISAMデータベース)の再編成
(3) ジョブ実行環境(ISAMデータベース)の再編成
(4) ajs2isamcondスクリプトを使用した再編成

(1) メンテナンスモード(jajs_maintainコマンド)によるISAMデータベースの再編成

JP1/AJS2 - Manager 07-00以降では,メンテナンスコマンド(jajs_maintain)によって,マネージャー機能またはスケジューラーサービス機能を縮退して,ISAMデータベースをメンテナンス(再編成)できます。これらのサービス縮退機能では,稼働中のJP1/AJS2サービス,JP1/AJS2 MonitorサービスおよびJP1/AJS2 Console Agentサービスに対してデータベースの切断要求を出し,データベースを切り離してから,安全にISAMデータベースが再編成できます。

ISAMデータベース(スケジューラーデータベースおよびジョブ実行環境データベース)を再編成するときは,jajs_maintainコマンドによるデータベースの再編成をお勧めします。

スケジューラーデータベースとジョブ実行環境データベースの両方を一括して再編成する場合,マネージャー機能縮退モードにします。スケジューラーデータベースだけを再編成する場合は,スケジューラー縮退モードにします。

jajs_maintainコマンドの詳細については,マニュアル「JP1/Automatic Job Management System 2 コマンドリファレンス jajs_maintain」を参照してください。

メンテナンスモードについては,「7.1 メンテナンスモード」を参照してください。各メンテナンスモード中の処理概要については,「14.1.1 メンテナンスモードの処理概要」を参照してください。

(2) スケジューラーデータベース(ISAMデータベース)の再編成

スケジューラーデータベースにISAMを使用している場合,ajsdbcondコマンドまたは,ajsautocondスクリプトでスケジューラーデータベースを再編成できます。ajsdbcondコマンドを使用する場合は,必ずバックアップを取得してから再編成してください。コマンドの詳細については,マニュアル「JP1/Automatic Job Management System 2 コマンドリファレンス ajsdbcond」を参照してください。

ajsautocondスクリプトについては,マニュアル「JP1/Automatic Job Management System 2 セットアップガイド 4.7.2 ISAMファイル自動再編成機能の設定」または「JP1/Automatic Job Management System 2 セットアップガイド 14.7.3 ISAMファイル自動再編成機能の設定」を参照してください。

(a) 未使用領域率の表示と再編成の時期

スケジューラーデータベース(ISAMデータベース)の未使用領域率の割合や未使用領域サイズは,ajsdbcondコマンドの-lオプションまたは-Lオプションで確認できます。ISAMデータベース(スケジューラー)の再編成時期は,ディスクの空き状態や性能面から一概に言えませんが,運用を続けていく中で,キーファイル中に発生する無効領域のサイズが大きくなった場合には,データベースアクセスに要するファイル入出力時間が増えるため,著しい性能劣化が起こります。

次に示すファイルが20MBを超えないように監視してください。このポイントを超えても再編成をせずに運用を続けると,性能が急激に悪化する場合があります。

なお,キー再利用機能を使用している場合は,このポイントに到達することはほとんどありませんが,長時間運用により,キーファイル内の利用効率が低下すると,このサイズに達するおそれがありますので監視いただくことをお勧めします。

実行登録全ユニット数 *(保存世代数+予定世代数)」を常に最小に保ち,大規模・多数のジョブネットを定義変更・削除または登録解除したあとに再編成を実施するなどの手段で性能劣化が防げます。定型業務を連続運転で行っている場合には,週1回または月1回などの間隔で定期的に再編成することをお勧めします。

また,ユニットの定義を頻繁に変更する場合,可変長テーブル中にフラグメンテーションが発生するため,ユニットを削除したり,定義を変更したりする場合はレコード件数に比例しないで性能が劣化する場合があります。このような運用の場合も再編成の頻度を上げる必要があります。

なお,ajsdbcondコマンドの-Lオプションは,他プロセスがISAMファイルにアクセスした状態でISAMファイルの状態を表示するため,未使用領域率や未使用領域サイズの値に誤差が生じます。また,ajsdbcond -Lコマンドを使用する場合は,ユニットに対しての定義・定義変更・実行登録・再実行・登録解除・予実績表示などの操作やジョブネットの実行を行っている時間を避けて使用してください。

(b) 未使用領域サイズおよび未使用領域サイズしきい値の出力

スケジューラーデータベース(ISAMデータベース)の未使用領域サイズは,ajsdbcond -iコマンドで確認できます。未使用領域サイズは通知メッセージが出力されます。

また,未使用領域サイズがしきい値に達しているかを,ajsdbcond -tコマンドで確認できます。未使用領域サイズしきい値に達していた場合,警告メッセージが出力されます。

メッセージの出力先には,次の出力先を単独で,または組み合わせて指定できます。

ジョブを多く実行する時期を避けて,ajsdbcond -tコマンドをジョブとして定義・実行することで,定期的にISAMファイルの状態を確認できます。

(c) スケジューラーデータベース(ISAMデータベース)の再編成手順

スケジューラーデータベース(ISAMデータベース)の再編成手順を次に示します。

  1. JP1/AJS2サービスを停止する。
  2. JP1/AJS2 MonitorサービスおよびJP1/AJS2 Console Agentサービスを停止する。
    接続しているJP1/AJS2 - Viewや,実行中のコマンドも停止させます。
  3. 環境変数JP1_HOSTNAMEを設定する。
    論理ホストのデータベースを再編成する場合は,環境変数JP1_HOSTNAMEに論理ホスト名称を設定してください。
    物理ホストで再編成する場合は,環境変数JP1_HOSTNAMEを設定しないでください。
  4. 次に示すスクリプトを実行する。または,ajsdbcondコマンドを実行する。
    Windowsの場合
    JP1/AJS2のインストール先フォルダ¥bin¥ajsautocond.bat
    UNIXの場合
    /opt/jp1ajs2/bin/ajsautocond

(3) ジョブ実行環境(ISAMデータベース)の再編成

ジョブ実行環境データベースは,ジョブ情報の保存日数で指定された日数を超過したジョブ情報については,自動的にレコードが削除されています。レコードが削除されると,無効領域が発生します。データを格納する領域は再利用されますが,ISAMファイルのキー再利用機能を有効にしていない場合,キーファイルには無効領域が残ります。データベースを再編成することで,占有されたディスク領域を解放できます。また,無効領域が多くあるデータベースへアクセスするとディスクのI/O回数が増加し,性能が低下することがあります。これも再編成することで改善されます。

ジョブ実行環境データベースはjpqautocondスクリプトを使用して再編成します。

また,jpqdbcondコマンドでもジョブ実行環境のデータベースを再編成できます。その場合は,必ずバックアップを取得してから再編成してください。コマンドの詳細については,マニュアル「JP1/Automatic Job Management System 2 コマンドリファレンス jpqdbcond」を参照してください。

注意事項
スケジューラーデータベースに組み込みDBを使用している場合でも,ジョブ実行環境データベース(ISAM)の再編成は必要です。

(a) 未使用領域率の表示と再編成の時期

ジョブ実行環境データベースの未使用領域率の割合は,jpqdbcond -lコマンドで確認できます。ISAMファイルが使用中の場合は,jpqdbcond -Lコマンドで未使用領域率の割合を確認できます。ただし,jpqdbcond -Lコマンドで未使用領域率を表示した場合,未使用領域率の値に誤差が生じます。jpqdbcond -Lコマンドを使用する場合は,ジョブを多く実行する時期を避けて使用してください。

ISAMデータベースのキー再利用機能を有効にしていない場合,1日当たり1万件のジョブを実行し,ジョブ情報保存日数が7日とすると,ジョブ情報保存日数の経過後1日当たり,最大約86メガバイトの無効領域が発生します(この無効領域には,再利用されるデータファイル分を含みます)。

ディスクの空き状態や性能面から,一概に言えませんが,運用を続けていく中で,キーファイル中に発生する無効領域のサイズが大きくなった場合には,データベースアクセスに要するファイル入出力時間が増えるため,著しい性能劣化が起こります。

次に示すファイルが20MBを超えないように監視してください。このポイントを超えても再編成をせずに運用を続けると,性能が急激に悪化する場合があります。

なお,キー再利用機能を使用している場合は,このポイントに到達することはほとんどありませんが,長時間運用により,キーファイル内の利用効率が低下すると,このサイズに達するおそれがありますので監視いただくことをお勧めします。

また,ジョブ実行環境の再編成の時期は,ジョブ情報の保存日数も目安にしてください。ジョブ情報の保存日数については,マニュアル「JP1/Automatic Job Management System 2 セットアップガイド 4.2 ジョブ実行環境の設定」,またはマニュアル「JP1/Automatic Job Management System 2 セットアップガイド 14.2 ジョブ実行環境の設定」を参照してください。

(b) 未使用領域サイズおよび未使用領域サイズしきい値の出力

ジョブ実行環境データベースの未使用領域サイズは,jpqdbcond -iコマンドで確認できます。未使用領域サイズは通知メッセージが出力されます。

また,未使用領域サイズがしきい値に達しているかを,jpqdbcond -tコマンドで確認できます。未使用領域サイズしきい値に達していた場合,警告メッセージが出力されます。

メッセージの出力先には,次の出力先を単独で,または組み合わせて指定できます。

ジョブを多く実行する時期を避けて,jpqdbcond -tコマンドをジョブとして定義・実行することで,定期的にISAMファイルの状態を確認できます。

(c) ジョブ実行環境データベース(ISAMデータベース)の再編成手順

ジョブ実行環境データベースの再編成手順を次に示します。

  1. JP1/AJS2サービスを停止する。
  2. 環境変数JP1_HOSTNAMEを設定する。
    論理ホストのデータベースを再編成する場合は,環境変数JP1_HOSTNAMEに論理ホスト名称を設定してください。
    物理ホストで再編成する場合は,環境変数JP1_HOSTNAMEを設定しないでください。
  3. 次に示すスクリプトを実行する。または,jpqdbcondコマンドを実行する。
    Windowsの場合
    JP1/AJS2のインストール先フォルダ¥bin¥jpqautocond.bat
    UNIXの場合
    /opt/jp1ajs2/bin/jpqautocond
    注意事項
    次に示すスクリプトやコマンドを同時に実行しないでください。
    ・jpqautocond
    ・jpqdbcond -x -k
    ・jajs_maintain -m manager

(4) ajs2isamcondスクリプトを使用した再編成

ajs2isamcondスクリプトは,スケジューラーデータベースとジョブ実行環境データベースの両方を,一括して再編成するサンプルスクリプトです。

スクリプト内のパスやファイル名称などは,すべて固定名称で記述してあります。インストール時の環境がスクリプト内の固定名称と異なる場合,スクリプトファイルをバックアップし,サービス名やISAMファイル名を環境に合わせて編集してから,ajs2isamcondスクリプトを使用する必要があります。このため,ISAMデータベースを再編成する場合は,次に示すコマンドまたはスクリプトを使用することをお勧めします。

ajs2isamcondスクリプトは,再編成するISAMファイルのバックアップを取得してから再編成します。そのため,再編成するISAMファイルと同量の空き領域が必要です。また,再編成中にはISAM再編成コマンド(Jiscondコマンド)が作業フォルダに,再編成するISAMファイルと同量の一時ファイルを作成します。そのため,再編成するISAMファイルと同量の空き領域がさらに必要です。

ajs2isamcondスクリプトを使用したISAMデータベースの再編成手順
  1. JP1/AJS2サービスを停止する。
  2. JP1/AJS2 MonitorサービスおよびJP1/AJS2 Console Agentサービスを停止する。
    接続しているJP1/AJS2 - Viewや,実行中のコマンドも停止させます。
  3. 次に示すスクリプトを実行する。
    Windowsの場合
    JP1/AJS2のインストール先フォルダ¥tools¥ajs2isamcond.bat
    UNIXの場合
    /opt/jp1ajs2/tools/ajs2isamcond
     
再編成に成功した場合,スクリプトの実行終了後,再編成対象ファイルをバックアップしていたフォルダが削除されます。
再編成に失敗した場合,バックアップしていた再編成対象ファイルは,次のフォルダに保存されています。
Windowsの場合
  • 「C:¥Temp¥Jp1ajs2IsamCond」
    スケジューラーデータベースの再編成対象ファイルがバックアップされています。
  • 「C:¥Temp¥Jp1ajs2IsamCond2」
    ジョブ実行環境の再編成対象ファイルがバックアップされています。
UNIXの場合
  • 「/tmp/Jp1ajs2IsamCond」
    スケジューラーデータベースの再編成対象ファイルがバックアップされています。
  • 「/tmp/Jp1ajs2IsamCond2」
    ジョブ実行環境の再編成対象ファイルがバックアップされています。