ISAMデータベースは,データの実体を格納する「データファイル」と,アクセスを高速化できるように,データへのインデクスを管理する「キーファイル」から成り立っています。ISAMでは,レコードを削除すると無効領域になるだけで,ファイルサイズが自動的に縮小することはありません。また,データファイル中の無効領域は再利用されますが,ISAMファイルのキー再利用機能を有効にしていない場合,キーファイル中の無効領域は再利用の対象になりません。JP1/AJS2 07-00以降で,新規にISAMデータベースをセットアップした場合は,キー再利用機能が有効になっています。JP1/AJS2 06-71より前のバージョンからバージョンアップした場合は,キー再利用機能を有効にすることをお勧めします。
ISAMデータベースを使用すると,日々の運用で占有量が増えてしまうファイルサイズの問題と,ファイルサイズの肥大化およびフラグメンテーション化による業務実行性能劣化の問題が発生します。
また,突然の電源ダウンなどで強制停止された場合,ISAMファイルのインデクスが不整合となるおそれがあります。
これらの問題は,業務の規模や処理量に応じて,適切な時期にISAMデータベースを再編成することで,アクセス性能の確保,ディスクの有効利用,障害発生後の不整合状態からの回復などを解決することができます。
なお,JP1/AJS2 - Agentには,JP1/AJS2のデータベースがないため,再編成を実行する必要はありません。
ここでは,個々のデータベース種別ごとの再編成方法について説明します。
(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データベース)の再編成手順を次に示します。
(3) ジョブ実行環境(ISAMデータベース)の再編成
ジョブ実行環境データベースは,ジョブ情報の保存日数で指定された日数を超過したジョブ情報については,自動的にレコードが削除されています。レコードが削除されると,無効領域が発生します。データを格納する領域は再利用されますが,ISAMファイルのキー再利用機能を有効にしていない場合,キーファイルには無効領域が残ります。データベースを再編成することで,占有されたディスク領域を解放できます。また,無効領域が多くあるデータベースへアクセスするとディスクのI/O回数が増加し,性能が低下することがあります。これも再編成することで改善されます。
ジョブ実行環境データベースはjpqautocondスクリプトを使用して再編成します。
また,jpqdbcondコマンドでもジョブ実行環境のデータベースを再編成できます。その場合は,必ずバックアップを取得してから再編成してください。コマンドの詳細については,マニュアル「JP1/Automatic Job Management System 2 コマンドリファレンス jpqdbcond」を参照してください。
(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データベース)の再編成手順
ジョブ実行環境データベースの再編成手順を次に示します。
(4) ajs2isamcondスクリプトを使用した再編成
ajs2isamcondスクリプトは,スケジューラーデータベースとジョブ実行環境データベースの両方を,一括して再編成するサンプルスクリプトです。
スクリプト内のパスやファイル名称などは,すべて固定名称で記述してあります。インストール時の環境がスクリプト内の固定名称と異なる場合,スクリプトファイルをバックアップし,サービス名やISAMファイル名を環境に合わせて編集してから,ajs2isamcondスクリプトを使用する必要があります。このため,ISAMデータベースを再編成する場合は,次に示すコマンドまたはスクリプトを使用することをお勧めします。
ajs2isamcondスクリプトは,再編成するISAMファイルのバックアップを取得してから再編成します。そのため,再編成するISAMファイルと同量の空き領域が必要です。また,再編成中にはISAM再編成コマンド(Jiscondコマンド)が作業フォルダに,再編成するISAMファイルと同量の一時ファイルを作成します。そのため,再編成するISAMファイルと同量の空き領域がさらに必要です。