MDC 表および ITC 表のブロック・マップ

MDC 表では、ブロックが空になった場合には、 その BID がブロック索引から除去されることにより、 その現在の論理セル値との関連が解除されます。 そのブロックは、別の論理セルによって再利用できるようになります。 ITC 表では、すべてのブロックが単一のセルと関連付けられます。 セル内でブロックを解放すると、そのブロックは後続の挿入で再利用できます。 この再利用により、新しいブロックを追加して表を拡張する必要が少なくなります。

新しいブロックが必要になった場合には、 以前に空になったブロックを、表から検索することなく短時間で見つかるようになっていなければなりません。

ブロック・マップは、MDC または ITC 表の中から空のブロックを検索するために使用される構造です。 ブロック・マップは、別個のオブジェクトとして格納されます。

  • SMS の場合、別個の .BKM ファイルとして
  • DMS の場合、オブジェクト表の中の新しいオブジェクト記述子として

ブロック・マップは、表の各ブロックごとに 1 個ずつの項目を含む配列です。 各項目は、1 つのブロックの一連の状況ビットで構成されます。

図1: ブロック・マップの動作
ブロック・マップの動作

図 1の左側は、テーブル内のブロックごとに異なる項目を持つブロック・マップ配列を示しています。 右側には、表の各エクステントの使用状況が示されています。空きはいくらかありますが、ほとんどは使用中です。 レコードは、ブロック・マップの中で使用中のマークが付けられたブロックだけに入っています。 単純にするため、この図には 2 つのディメンション・ブロック索引のうち 1 つだけが示されています。

注:
  1. ブロック索引に含まれるポインターは、 ブロック・マップの中で IN USE とマークされているブロックに対するものだけです。
  2. 最初のブロックは予約済みです。 このブロックには、表のシステム・レコードが含まれています。

セルの中で使用できる空きブロックを見つけるのは簡単です。 ブロック・マップをスキャンして FREE ブロック、 つまりどのビットもセットされていないブロックを検索するだけです。

また、表スキャンでは、 現在データが含まれているエクステントだけにアクセスするためにもブロック・マップが使用されます。 使用中でないエクステントは、 表スキャンに含める必要がありません。 例えば、この例 (図 1) の表スキャンは、表内の 3 番目のエクステント (エクステント 2) から開始し、最初の予約済みエクステントと後続の空のエクステントをスキップし、表内のブロック 2、3、および 4 をスキャンし、次のエクステント (そのエクステントのデータ・ページには触れない) をスキップしてからスキャンを続行します。