付録B.2 組み込みDBのテーブルのオプションを変更する
組み込みDBをスケジューラーサービスのデータベースに指定している場合,JP1/AJS3の運用によってはデータ量的には余裕があったとしても,組み込みDBのデータ格納領域が想定しているよりも早く満杯になってしまう場合があります。これは,データの追加と削除を繰り返すことによって,テーブルに予約された無効領域が発生するために起こる現象です。
ここでは,組み込みDBのデータ領域の仕組みと,無効領域の発生を抑止するためのコマンドについて説明します。
- 〈この項の構成〉
(1) 組み込みDBの領域の仕組み
ここでは,組み込みDBの領域の仕組みについて説明します。
組み込みDBでは,データベース内の実際のデータを「ページ」に格納します。このページを複数集めたものを「セグメント」と呼び,セグメントごとにデータベース内のテーブルを結び付けて管理します。
組み込みDBの領域管理方法を次に示します。
|
組み込みDBへのアクセスでは,次に示す規則で領域を使用します。
-
一つのセグメント内に,複数のテーブルの情報を格納することはできません。
-
一つのセグメント内のページが満杯になった場合,新たにセグメントをテーブルに割り当てます。
-
レコード削除を行った場合,ページおよびセグメントは無効領域となります。ただし,通常,自動的には再利用されません。
-
再利用できるセグメントおよびページがあっても,未使用領域の使用を優先します。
JP1/AJS3のスケジューラーデータベースには11個のテーブルがあります。ただし,一つのテーブルが多くの無効領域を保持している状態では,データが格納されていない状態でも,それ以外のテーブルで新たな領域は取得できません。これによって,領域不足のエラーが発生してしまうことがあります。
|
上記の図のように,領域をすべて使用してしまうことによって,新たにデータを格納しようとしたときに,テーブルA以外のテーブルでの領域確保時に未使用領域を確保できません。このため,無効領域が存在する場合でも領域不足エラーとなってしまいます。
(2) 空き領域再利用機能の適用
再利用できるセグメントがあっても,未割り当てセグメントが存在すれば使用するのが組み込みDBの標準的な領域割り当て方法です。
組み込みDBには,テーブルごとにデータベース領域内のセグメント再利用を促す空き領域再利用機能があります。この機能を使用することによって,新たなセグメントが必要となった場合で,かつあらかじめ設定したセグメント数を超えようとした場合,そのテーブルに予約されている(過去に使用したことがあり削除されている)セグメントを優先的に再利用します。
例えば,テーブルAに対して50%程度のセグメント数を設定すると,領域内の半分程度のセグメントを使った時点で,新規割り当てによる拡張をいったんやめて,再利用できるセグメントを探すようになります。このため,特定のテーブルで無効領域を占有してしまう状況にはなりません。
組み込みDBのセットアップ時に空き領域再利用機能を有効にしたい場合は,ajsembdbsetupコマンドの-ruオプションを指定する必要があります。ajsembdbsetupコマンドの使用方法については,「2. セットアップコマンド ajsembdbsetup」を参照してください。
大規模モデルで組み込みDBを構築して,物理ホストのデフォルトスケジューラーサービス(AJSROOT1)で組み込みDBを使用し,空きページ再利用機能を有効にしたい場合は,次のコマンドを実行してください。
ajsembdbsetup -F AJSROOT1 -ru l
すでに組み込みDBのセットアップが完了している環境で,空き領域再利用機能を有効にしたい場合は,ajsembdbreuseコマンドを実施する必要があります。ajsembdbreuseコマンドの詳細については,「付録B.4 ajsembdbreuse」を参照してください。
- (例)
-
ajsembdbbuildコマンドで大規模(-lオプション)を指定した組み込みDBの環境で,表の定義を変更したい場合
-
Windowsホストの場合
(組み込みDBインストール先ディレクトリはC:\Program Files\HITACHI\JP1AJS2\embdb\_JF0)
ajsembdbreuse -i "C:\Program Files\HITACHI\JP1AJS2\embdb\_JF0" -l
-
UNIXホストの場合
(組み込みDBインストール先ディレクトリは/opt/jp1ajs2/embdb/_JF0)
ajsembdbreuse -i /opt/jp1ajs2/embdb/_JF0 -l
-
- (例)
-
組み込みDBの環境を構築後,組み込みDBのajsembdbaddareaコマンドでデータベース領域を拡張している場合(AJS2DATAの総セグメント数を200,000としている場合)
-
Windowsホストの場合
(組み込みDBインストール先ディレクトリはC:\Program Files\HITACHI\JP1AJS2\embdb\_JF0)
ajsembdbreuse -i "C:\Program Files\HITACHI\JP1AJS2\embdb\_JF0" -n 200000
-
UNIXホストの場合
(組み込みDBインストール先ディレクトリは/opt/jp1ajs2/embdb/_JF0)
ajsembdbreuse -i /opt/jp1ajs2/embdb/_JF0 -n 200000
-
空き領域再利用機能は,テーブルに対して有効な機能であるため,インデクス領域に対しては適用できません。インデクス領域で発生する無効領域は,定期的にメンテナンスすることが必要です。メンテナンス方法については,マニュアル「JP1/Automatic Job Management System 3 運用ガイド 9.2.1(1) ajsembdbreclaimコマンドを自動で実行する」,およびマニュアル「JP1/Automatic Job Management System 3 運用ガイド 9.2.1(2) ajsembdbreclaimコマンドを手動で実行する」を参照してください。
なお,空き領域再利用機能を有効にした場合でも,業務量の増加や異例運用などによって,領域の占有量が増加してしまうことが考えられます。このため,定期的に未使用領域セグメントを監視する必要があります。