付録B.2 組み込みDBのテーブルのオプションを変更する

組み込みDBをスケジューラーサービスのデータベースに指定している場合,JP1/AJS2の運用によってはデータ量的には余裕があったとしても,組み込みDBのデータ格納領域が想定しているよりも早く満杯になってしまう場合があります。これは,データの追加と削除を繰り返すことによって,テーブルに予約された無効領域が発生するために起こる現象です。

ここでは,組み込みDBのデータ領域の仕組みと,無効領域の発生を抑止するためのツールについて説明します。

<この項の構成>
(1) 組み込みDBの領域の仕組み
(2) 空き領域再利用機能の適用

(1) 組み込みDBの領域の仕組み

ここでは,組み込みDBの領域の仕組みについて説明します。

組み込みDBでは,データベース内の実際のデータを「ページ」に格納します。このページを複数集めたものを「セグメント」と呼び,セグメントごとにデータベース内のテーブルを結び付けて管理します。

組み込みDBの領域管理方法を次に示します。

図B-1 組み込みDBの領域管理方法

[図データ]

組み込みDBへのアクセスでは,次に示す規則で領域を使用します。

JP1/AJS2のスケジューラーデータベースには9個のテーブルがあります。ただし,一つのテーブルが多くの無効領域を保持している状態では,データが格納されていない状態でも,それ以外のテーブルが新たに領域を取得することができません。これによって,領域不足のエラーが発生してしまうことがあります。

図B-2 特定のテーブルの無効領域が空き領域をすべて使用してしまった場合

[図データ]

上記の図のように,領域をすべて使用してしまうことによって,新たにデータを格納しようとしたときに,テーブルA以外のテーブルでの領域確保時に未使用領域を確保できません。このため,無効領域が存在する場合でも領域不足エラーとなってしまいます。

(2) 空き領域再利用機能の適用

再利用可能なセグメントがあっても,未割り当てセグメントが存在すれば使用するのが組み込みDBの標準的な領域割り当て方法です。

組み込みDBには,テーブルごとにRDエリア内のセグメント再利用を促す空き領域再利用機能があります。この機能を使用することによって,新たなセグメントが必要となった場合で,かつあらかじめ設定したセグメント数を超えようとした場合,そのテーブルに予約されている(過去に使用したことがあり削除されている)セグメントを優先的に再利用します。

例えば,テーブルAに対して50%程度のセグメント数を設定すると,領域内の半分程度のセグメントを使った時点で,新規割り当てによる拡張をいったんやめて,再利用可能なセグメントを探すようになります。このため,特定のテーブルの無効領域を占有してしまう状況にはなりません。

組み込みDBのセットアップ時で,ISAMから組み込みDBへの移行時に空き領域再利用機能を有効にしたい場合は,ajsembdbsetupスクリプトのオプション-ruを指定する必要があります。ajsembdbsetupスクリプトの使用方法については,マニュアル「JP1/Automatic Job Management System 2 セットアップガイド 20. セットアップ時に使用するコマンド ajsembdbsetup」を参照してください。

大規模モデルで組み込みDBを構築して,物理ホストのデフォルトスケジューラーサービス(AJSROOT1)で組み込みDBを使用し,空きページ再利用機能を有効にしたい場合は,次のコマンドを実行してください。

ajsembdbsetup -F AJSROOT1 -ru l

すでに組み込みDBへの移行が完了している環境で,空き領域再利用機能を有効にしたい場合は,ajsembdbreuseを実施する必要があります。ajsembdbreuseの詳細は,「付録B.4 ajsembdbreuse」を参照してください。

(例)
ajsembdbbuildで規模を-lで指定した組み込みDBの環境で,表の定義を変更したい場合
  • Windowsホストの場合
    (組み込みDBインストールディレクトリはc:¥Win32App¥Hitachi¥HiRDB_e_JA0)

ajsembdbreuse -i c:¥Win32App¥Hitachi¥HiRDB_e_JA0 -l

  • UNIXホストの場合
    (組み込みDBインストールディレクトリは/opt/HiRDB_J)

ajsembdbreuse -i /opt/HiRDB_J -l

(例)
組み込みDBの環境を構築後,組み込みDBのajsembdbaddareaコマンドでRDエリアに領域を追加している場合(AJS2DATAの総セグメント数を200,000としている場合)
  • Windowsホストの場合
    (組み込みDBインストールディレクトリはc:¥Win32App¥Hitachi¥HiRDB_e_JA0)

ajsembdbreuse -i c:¥Win32App¥Hitachi¥HiRDB_e_JA0 -n 200000

  • UNIXホストの場合
    (組み込みDBインストールディレクトリは/opt/HiRDB_J)

ajsembdbreuse -i /opt/HiRDB_J -n 200000

空き領域再利用機能は,テーブルに対して有効な機能であるため,インデクス領域に対しては適用できません。インデクス領域で発生する無効領域は,定期的にメンテナンスすることが必要です。メンテナンス方法については,マニュアル「JP1/Automatic Job Management System 2 設計・運用ガイド 15.14.4(2) ajsembdbreclaimコマンドを手動で実行する」,マニュアル「JP1/Automatic Job Management System 2 設計・運用ガイド 15.14.4(3) ajsembdbreclaimコマンドを自動で(ジョブとして)実行する」を参照してください。

なお,空き領域再利用機能を有効にした場合でも,業務量の増加や異例運用などによって,領域の使用量が増加してしまうことが考えられます。このため,定期的に未使用領域セグメントを監視する必要があります。