バージョン 8.1.3
 —  DBA タスク  —

ディスクスペースの使用法

データベース環境においては、次の理由からディスクスペースの効率的な使用が重要です。

ディスクスペースの効率的な使用法については、システムの他の目標(パフォーマンス、柔軟性、使い易さ)を考慮しながら決定を下さなければなりません。 このセクションでは、これら要素とディスクスペースの効果的使用法との兼ね合いに関する考察と手法について説明します。

このドキュメントでは、次のトピックについて説明します。


データ圧縮

各フィールドは次の 3 つの圧縮に関する指定のうち 1 つを定義できます。

次の表に 5 バイトの英数字フィールドに各圧縮オプションを使用したときの格納法を示します。

フィールド値 固定ストレージ 通常の圧縮 空値省略
ABCbb ABCbb(5 バイト) 4ABC(4 バイト) 4ABC(4 バイト)
ABCDb ABCDb(5 バイト) 5ABCD(5 バイト) 5ABCD(5 バイト)
ABCDE ABCDE(5 バイト) 6ABCDE(6 バイト) 6ABCDE(6 バイト)
bbbbb bbbbb(5 バイト) 2b(2 バイト) *(1 バイト)
X X(1 バイト) 2X(2 バイト) 2X(2 バイト)

各格納値の前の数字は、長さバイトを含むフィールドのバイト長を示します(FI フィールドにはありません)。 空値省略に対する * は、省略されたフィールド数を示すもので、 レコード内のこの位置で現在、空値の(省略された)フィールド数を示す 1 バイトのフィールドです。 このフィールドは最大 63 個の省略フィールドを示します。

選択する圧縮オプションは、フィールドのインバーテッドリストの作成(ディスクリプタの場合)、またフィールドの圧縮と圧縮解除に必要な時間にも影響します。

固定ストレージ

固定ストレージと定義するとフィールドに対する圧縮は行われません。 長さバイトも付加されず、フィールドの標準長で格納されます。 固定ストレージは、ほとんど空値にはならない 1~2 バイトの小さいフィールドや、圧縮がまったく、またはほとんど不可能であるフィールドに指定します。 FI フィールドの使用に関する制限等については、『Adabas ユーティリティマニュアル』の ADACMP ユーティリティを参照してください。

通常の圧縮

通常の圧縮では英数字フィールドの末尾の空白や数値フィールドの先頭のゼロを除きます。 少くとも 2 バイトの末尾の空白や先頭のゼロが除かれれば、ディスクスペースを節約できます。 しかし、2 バイトから成るフィールドに対するスペースの節約は起こりません。また、1 バイトのフィールドに関しては、長さバイトの追加で必要スペースが事実上 2 倍になります。 これらのフィールドおよび先頭や末尾のゼロと空白がほとんど存在しないフィールドは、固定ストレージ(FI)オプションで定義して圧縮を避けるべきです。

空値省略

フィールドに空値省略(NU)を指定し、フィールド値が空値であると、長さバイトと圧縮された空値の代わりに 1 バイトの空値フィールドインジケータが格納されます(「データ圧縮」を参照)。 この空値フィールドインジケータは、レコード内のその位置での空値省略されたフィールド(連続フィールド)の数を示します。 したがって、よく空になるフィールドをレコード内で隣り合わせにし、それぞれに空値省略オプションを指定すると有利です。

ディスクリプタとしても定義されている NU フィールドについて、空値省略指定するとインバーテッドリストに空値は作られません。 このため、検索コマンドでそのディスクリプタを検索しようとしても空値が含まれる該当ディスクリプタレコードは認識されません。

空値省略で定義したフィールドから作られるサブディスクリプタやスーパーディスクリプタについても同様です。 つまり、元のフィールドの該当バイトが空値で、フィールドに空値省略(NU)オプションが定義されていると、サブディスクリプタに対するエントリは作られません。 スーパーディスクリプタの派生元のフィールドが、空値を含む NU フィールドの場合、このスーパーディスクリプタのエントリは作成されません。

したがって、ディスクリプタで空値を検索する必要がある場合や、空値を含むレコードをディスクリプタ順で読み込む必要がある場合、例えば論理順の読み込みまたはソートを制御する場合、ディスクリプタフィールドに NU オプションを指定しないでください。

空値省略をマルチプルバリューフィールドやピリオディックグループ内のフィールドに指定すると有効であり、必要なディスクスペースや必要な内部処理を減らすことができます。 これらフィールドの更新は、使用する圧縮オプションによりさまざまです。

空値省略オプションを定義したマルチプルバリューフィールドが空値に更新されると、右側の値はすべて左にシフトされ、値カウントも減らされます。 ピリオディックグループ内のフィールドがすべて空値省略と定義され、グループ全体が空値に更新されると、更新されたオカレンスが最終のオカレンスの場合だけオカレンスカウントが減らされます。 マルチプルバリューフィールドやピリオディックグループに関する詳細は、『Adabas ユーティリティマニュアル』の ADACMP ユーティリティ、および『Adabas コマンドリファレンスマニュアル』の A1/A4、N1/N2 コマンドを参照してください。

Top of page

フォワードインデックス圧縮

フォワード(またはフロント、プリフィクス)インデックス圧縮機能は、インデックス値から余分な接頭辞情報を削除してインデックススペースを節約します。 これにより、ディスクスペースの使用量が減り、より少ないインデックスレベルが使用される可能性があり、インデックス I/O 操作が減ることから、全体の情報処理量が向上します。 同量のインデックス情報がより少ないスペースを占めるので、バッファプールがより効率的になります。 L3、L9、または S2 のようなコマンド(インデックスをシーケンシャルに横断する)はもっと速くなり、小さくなったインデックスサイズは、インデックスを読み込みまたは修正する Adabas ユーティリティの経過時間を減少します。

1 つのインデックスブロック内で、最初の値は完全な長さで保存されます。 後続のすべての値については、前者と共通の接頭辞が圧縮されます。 インデックス値は、次のように表現されます。

 <l,p,value>

ここでは次の内容を表しています。

p 前の値の接頭辞と等しいバイト数です。
l p バイトを含む残りの値の排他的な長さです。

圧縮解除 圧縮
ABCDE 6 0 ABCDE
ABCDEF 2 5 F
ABCGGG 4 3 GGG
ABCGGH 2 5 H

インデックス圧縮は、ディスクリプタのフォーマットによって影響されません。 これは、PE オプションやマルチクライアントディスクリプタにも機能します。

インデックス値の圧縮が可能な限り大きくなるのは、次のようにピリオディックグループが英数字の場合です。

253 bytes for the proper value if no bytes are compressed 1 byte for the PE index 1 byte for the p-byte.

よって、排他的な長さの合計はシングルバイトに保存することができます。

Adabas は、フォワードインデックス圧縮をファイルレベルで実装します。 ファイルをロードする際(ADALOD)、そのファイルのインデックス値を圧縮するかどうかのオプションが提供されます。 オプションは、ファイルを再び並べ替えることで変更することができます(ADAORD)。

Adabas は、データベースの全インデックス値をまとめて圧縮するオプションも提供します。 この場合、特定のファイルを別々に設定することができます。ファイルレベルの設定は、データベースの設定をオーバーライドします。

インデックス値を圧縮するかどうかの判断は、次に示すようにインデックス値の類似点とファイルサイズに基づきます。

ファイルのインデックス値の圧縮率がよくない場合がありますが、それでもインデックスが圧縮されていれば、圧縮されていない場合よりも必要になるインデックスブロックが少なくなります。

Top of page

パディングファクタ

大量のレコード更新が発生する場合、大規模な量のレコードが移動、すなわち、現在のブロックから削除し、拡張レコード用のスペースがある別のブロックへ移動することになります。 ファイルのロード時、このファイルに対するデータストレージのパディングファクタを大きくとれば、移動するレコードの量を大幅に減らすことができます。 パディングファクタとは、レコード拡張用に確保しておく各物理ブロック内の比率を示します。

ファイルロード時やファイルに新レコードを追加したとき、パディングエリアは使われません(ADAM ファイルには適用されません。ADAM ファイルでは計算で求められたデータストレージブロックにレコードを格納するのにパディングファクタが必要な場合に使用します)。 レコードの拡張される比率が小さいとき、レコード拡張が起こらないブロックのパディングエリアは無駄になってしまうので、パディングファクタを大きくとる必要はありません。

大量のレコード更新/追加があり、1 つまたは複数のディスクリプタの現在の値の範囲内に大量の新しい値が挿入される場合、アソシエータ内でも大規模な量の移動が起こります。 これはアソシエータのパディングファクタを大きくとれば減らすことができます。

パディングファクタを大きくとったときの欠点は、必要なディスクスペースが大きくなり(ブロック当りのレコードやエントリが小さくなります)、順次処理について読まれる物理ブロックが多くなるので効率が低下します。

ファイルのロード時、パディングファクタを指定します。ファイルまたはデータベースに対して ADADBS MODFCB 機能または ADAORD ユーティリティを実行するときに、パディングファクタを変えることができます。

Top of page