データベース管理表スペースの表スペース・マップ

表スペース・マップは DMS 表スペースを表すデータベース・マネージャーの内部表記であり、 表スペースにおける論理ページ・ロケーションから物理ページ・ロケーションへの変換を記述しています。 このトピックでは、表スペース・マップが役立つ理由と、 表スペース・マップの情報がどこから得られるかを説明します。

パーティション・データベースでは、 DMS 表スペース内の各ページに 0 から N-1 までの番号が論理的に付けられています (N は、 表スペース内の使用できるページ数)。

DMS 表スペース内のページは、 エクステント・サイズに基づいて各エクステントにグループ分けされ、 表スペース管理の観点から言うと、 すべてのオブジェクト割り振りはエクステント・ベースで行われます。 つまり、表があるエクステントの半分のページしか使っていなくても、 そのエクステント全体が使用中で、 そのオブジェクトに所有されていると見なされます。 デフォルトでは、コンテナー・タグを保持するために 1 つのエクステントが使用され、 このエクステント内のすべてのページはデータを保持できません。 ただし、DB2_USE_PAGE_CONTAINER_TAG レジストリー変数がオンになっていると、コンテナー・タグのために 1 つのページだけが使用されます。

図 1 は、DMS 表スペースの論理アドレス・マップを示しています。

図1: DMS 表スペース
DMS 表スペースの論理アドレス・マップを示す図

表スペースのアドレス・マップには 2 種類のマップ・ページがあります。 エクステント・マップ・ページ (EMP) とスペース・マップ・ページの 2 種類です。

オブジェクト表は内部リレーショナル表で、 オブジェクト ID を表の最初の EMP エクステントのロケーションにマップします。 この EMP エクステントは、直接的にも間接的にも、 オブジェクトにあるすべてのエクステントをマップします。 各 EMP には、項目の配列が含まれています。 各項目は、オブジェクト相対エクステント番号を、 オブジェクト・エクステントが配置されている表スペース相対ページ番号にマップします。 直接 EMP 項目は、オブジェクト相対アドレスを表スペース相対アドレスに直接マップします。 最初の EMP エクステントにある最後の EMP ページには、 間接項目が含まれます。 間接 EMP 項目は EMP ページにマップし、 続いて EMP ページがオブジェクト・ページにマップします。 最初の EMP エクステントにある最後の EMP ページの末尾の 16 個の項目には、 2 重の間接項目が含まれます。

論理表スペース・アドレスからのエクステントは、 表スペースに関連付けられているコンテナー全体にラウンドロビン順序でストライピングされます。

コンテナー内のスペースはエクステント単位で割り振られるため、 完全なエクステントを形成しないページは使用されません。 例えば、205 ページからなるコンテナーがあり、 エクステント・サイズが 10 である場合、 1 つのエクステントがタグ用に使用され、 19 個のエクステントにデータが保持されます (残る 5 ページは無駄になります)。

DMS 表スペースにただ 1 つのコンテナーが含まれている場合、 論理ページ番号からディスク上の物理ロケーションへの変換プロセスは単純で、 ページ 0、1、2 はディスク上に同じ順番で格納されます。

複数のコンテナーが存在し、各コンテナーのサイズが同じである場合にも、 変換プロセスはかなり単純です。 表スペースの最初のエクステント (ページ 0 から [エクステント・サイズ - 1] ページまでを含む) は最初のコンテナーに格納され、2 番目のエクステントは 2 番目のコンテナーに格納されます (以下同様)。 最後のコンテナーが終わると、最初のコンテナーから再び処理が繰り返されます。 この循環的プロセスにより、データのバランスが取られます。

さまざまなサイズのコンテナーが含まれる表スペースの場合、より大きなコンテナーの余分のスペースが利用されないため、各コンテナーを順番に移動する単純な方式は使用できません。 このような場合、表スペース・マップが役立ちます。表スペース・マップは、表スペース内でエクステントがどのように配置されるかを管理し、物理コンテナー内のすべてのエクステントが利用されるようにします。

注: 以下の例では、コンテナー・サイズはコンテナー・タグのサイズを考慮しません。 また、単に例を示すため、かなり小さなコンテナー・サイズを使っていますが、そのコンテナー・サイズをお勧めするという意味ではありませんのでご注意ください。 さらに、 1 つの表スペース内でいろいろなサイズのコンテナーを使っていますが、 実際には、同じサイズのコンテナーを使用することをお勧めします。

例 1:

表スペースに 3 つのコンテナーがあり、 各コンテナーには 80 個の使用可能なページが含まれ、 表スペースのエクステント・サイズは 20 です。 したがって各コンテナーには 4 つのエクステント (80/20) が含まれ、 合計で 12 個のエクステントが存在します。 これらのエクステントは、 図 2に示すように、ディスク上に配置されます。

図2: 3 つのコンテナー、12 のエクステントが含まれる表スペース
3 つのコンテナーと 12 個のエクステントで構成される表スペースが表示されます。
表スペース・マップを表示するには、 スナップショット・モニターを使って表スペースのスナップショットを取ってください。 例 1 では 3 つのコンテナーのサイズが等しく、表スペース・マップは以下のようになります。
  Range   Stripe Stripe Max      Max   Start   End    Adj.  Containers
  Number  Set    Offset Extent   Page  Stripe  Stripe 
     [0]    [0]       0     11    239       0       3   0   3 (0, 1, 2)

範囲 (range) とはマップの一部であり、 ストライプ内の隣接する範囲の中にすべて同じコンテナー・セットが含まれます。 例 1 では、すべてのストライプ (0 から 3 まで) に 3 つのコンテナー (0、1、2) からなる同じセットが含まれ、 これが 1 つの範囲と見なされます。

表スペース・マップの見出しは、Range Number (範囲番号)、 Stripe Set (ストライプ・セット)、Stripe Offset (ストライプ・オフセット)、 Maximum extent number addressed by the range (範囲でアドレス指定される最大エクステント番号)、 Maximum page number addressed by the range (範囲でアドレス指定される最大ページ番号)、 Start Stripe (開始ストライプ)、End Stripe (終了ストライプ)、 Range adjustment (範囲調整)、および Container list (コンテナー・リスト) です。 これらについては、例 2 で詳しく説明されます。

この表スペースは、 図 3に示すように図示することもできます。この図では、各縦線はコンテナーに対応し、各横線は ストライプと呼ばれ、各セル番号はエクステントに対応しています。

図3: 3 つのコンテナー、 12 のエクステントが含まれる表スペース (ストライプを強調した場合)
表または配列の形式で 3 つのコンテナーと 12 個のエクステントを持つ表スペース。

例 2:

表スペースには 2 つのコンテナーがあり、 最初のコンテナーのサイズは 100 ページ、2 番目のサイズは 50 ページ、 そしてエクステント・サイズは 25 です。 つまり最初のコンテナーには 4 つのエクステント、 2 番目のコンテナーには 2 つのエクステントが含まれます。 図 4に示すように、表スペースを図で示すことができます。

図4: 2 つのコンテナーが含まれる表スペース (範囲を強調した図)
表または配列の形式で 2 つのコンテナーと 6 つのエクステントを持つ表スペース。
ストライプ 0 および 1 には両方のコンテナー (0、1) が含まれますが、 ストライプ 2 および 3 には最初のコンテナー (0) しか含まれません。 この 2 つのストライプ・セットが、それぞれ範囲になります。 表スペース・マップは、以下の表スペース・スナップショットのようになります。
  Range   Stripe Stripe   Max      Max   Start   End    Adj.  Containers
  Number  Set    Offset   Extent   Page  Stripe  Stripe 
      [0]    [0]      0        3     99       0       1  0    2 (0, 1)
      [1]    [0]      0        5    149       2       3  0    1 (0)

最初の範囲に 4 つのエクステントがあるので、この範囲でアドレス指定される最大エクステント番号 (最大エクステント) は 3 です。 各エクステントに 25 のページがあるので、最初の範囲に 100 のページあることになります。 ページの番号付けもまた 0 から始まるので、 この範囲でアドレス指定される最大ページ番号 (Max Page) は 99 になります。 この範囲の最初のストライプ (開始ストライプ) は 0、最後のストライプ (終了ストライプ) は 1 です。 この範囲には 2 つのコンテナー 0 と 1 があります。 ストライプ・オフセットは、ストライプ・セット内の最初のストライプです。この場合は、ストライプ・セットが 1 つしかないので 0 になります。 範囲調整 は、表スペースでデータのリバランスを行う時に使用するオフセットです。 (表スペースでスペースが追加またはドロップされるとき、 リバランスが行われる場合があります。) リバランスが行われない限り、この値は常に 0 です。

2 番目の範囲には 2 つのエクステントがあります。前の範囲でアドレス指定される最大エクステント番号は 3 なので、この範囲でアドレス指定される最大エクステント番号は 5 になります。 2 番目の範囲には 50 のページがあります (2 エクステント * 25 ページ)。前の範囲でアドレス指定される最大ページ番号は 99 なので、この範囲でアドレス指定される最大ページ番号は 149 になります。 この範囲はストライプ 2 で始まり、ストライプ 3 で終わります。