再利用可能ストレージ

「再利用可能ストレージ (Reclaimable storage)」 は、 Db2® 9.7 以降の非一時自動ストレージおよび DMS 表スペースのフィーチャーです。 これを使用して、最高水準点 より下にある使用中のエクステントを統合し、表スペースの未使用エクステントを、再利用するためにシステムに戻します。

Db2 9.7より前に作成された表スペースの場合、システムにストレージを解放する唯一の方法は、コンテナーをドロップするか、または最高水準点 より上 の未使用エクステントを除去してコンテナーのサイズを削減することでした。 最高水準点を下げるための直接的な仕組みがありませんでした。 データをアンロードしてから空の表スペースに再ロードするか、または、 表および索引の再編成を実行するなどの間接操作によって下げることが可能でした。 この後者の方法では、最高水準点より下にフリーのエクステントが存在していたとしても、 依然として最高水準点が下がらない場合があります。

エクステントの統合処理において、データを含むエクステントは、 最高水準点より下の未使用エクステントに移動されます。 エクステントの移動後に、最高水準点より下にフリー・エクステントが存在する場合は、 フリー・ストレージとして解放されます。 次に、最高水準点は、表スペース内の使用中の最後のエクステントの直後の ページに移動されます。 再利用可能ストレージを使用可能な表スペースでは、ALTER TABLESPACE ステートメントを使用して表スペースの未使用エクステントを再利用できます。 図 1 は、再利用可能ストレージがどのように機能するかの概略を示しています。
図 1. 再利用可能ストレージの動作方法。 表スペースで再利用可能ストレージが使用可能な場合、使用中のエクステントを移動して、表スペース内の低い位置にある未使用のエクステントを占有できます。
再利用可能ストレージ表スペース内のフリー・スペースを埋めるためにエクステントがどのように移動されるかを示す図。

Db2 バージョン 9.7 以降で作成されているすべての非一時自動ストレージ表スペースおよび DMS 表スペースは、最高水準点より下にあるエクステントを統合するこの機能を備えています。 以前のバージョンで作成された表スペースの場合、まず、 Db2 9.7を使用して作成された新しい表スペースで表スペースを置き換える必要があります。 データはアンロードして再ロードするか、SYSPROC.ADMIN_MOVE_TABLE プロシージャーを使用して、オンライン表の移動操作で移動できます。 ただし、このようなマイグレーションは必須ではありません。 再利用可能ストレージを使用可能な表スペースは、再利用可能ストレージのない表スペースと同じデータベースに共存できます。

エクステントの移動による表スペース・サイズの削減は、オンライン操作です。 つまり、データ操作言語 (DML) および データ定義言語 (DDL) は、削減操作が行われている間も続行できます。 バックアップやリストアなどの操作は、エクステントの移動操作とは同時に実行できません。 このような場合、移動中のエクステントにアクセスする必要があるプロセス (バックアップなど) は、 特定の数 (この数は非ユーザー構成可能) のエクステントが移動するまで待機する必要があります。その時点で、バックアップ・プロセスはアクセスするエクステントのロックを取得し、処理を続行します。

エクステント移動の進行状況は、MON_GET_EXTENT_MOVEMENT_STATUS 表関数を使用してモニターできます。

ヒント: ALTER TABLESPACE ステートメントが再利用するスペースの量を最大化するには、まず表スペース内の表および索引に対して REORG 操作を実行します。

自動ストレージ表スペース

自動ストレージ表スペースは、以下のような方法で削減できます。
コンテナー縮小のみ
このオプションでは、エクステントは移動されません。 データベース・マネージャーは、削除ペンディング中のエクステントを最初に解放することによって、コンテナーのサイズを削減しようとします。 (リカバリー性の確保のために、削除ペンディング中のエクステントの一部を解放できないことがあるので、そうしたエクステントの一部が残る可能性もあります。) 最高水準点が解放されるエクステントの中にある場合、最高水準点は引き下げられます。それ以外の場合、最高水準点に変更は加えられません。 次に、コンテナーは、表スペースの総量が最高水準点と同じかそれよりもやや大きくなるように、サイズ変更されます。 この操作は、ALTER TABLESPACE および REDUCE 節を使用して自動的に実行されます。
最高水準点の引き下げのみ
このオプションでは、最大数のエクステントを移動して最高水準点を引き下げますが、コンテナーのサイズ変更操作は実行されません。 この操作は、ALTER TABLESPACE ステートメントの LOWER HIGH WATER MARK 節を単独で使用して実行されます。
最高水準点の引き下げと一定量のコンテナーの削減
このオプションでは、表スペースの削減量を絶対量 (KB、MB、または GB) で指定できます。 または、パーセントを入力して削減する相対量を指定できます。 いずれの場合も、データベース・マネージャーはまずエクステントを移動せずに、 要求された量のスペースの削減を試みます。 つまり、 コンテナー縮小のみで説明されているように、削除保留エクステントを解放し、最高水準点の引き下げを試みることによって、コンテナー・サイズのみを削減することによって表スペースを削減しようとします。 この方法で、十分な削減が得られない場合、データベース・マネージャーは表スペースの下部にある使用済みエクステントを移動して、最高水準点の引き下げを開始します。 エクステントの移動が完了すると、コンテナーは、表スペースの総量が最高水準点と同じかそれよりもやや大きくなるように、サイズ変更されます。 移動できるエクステントが足りないために、要求された量だけ表スペースを削減できない場合、最高水準点が可能な限り低くされます。 この操作は、ALTER TABLESPACE ステートメントの REDUCE 節を使用して実行されます。REDUCE 節には、表スペースのサイズの削減指定量が含まれます。
最高水準点の引き下げと可能な最大量のコンテナーの削減
この場合、データベース・マネージャーは表スペースとそのコンテナーのサイズを削減するために、可能な限り多くのエクステントを移動します。 この操作は、ALTER TABLESPACE ステートメントの REDUCE MAX 節を使用して実行されます。

エクステントの移動処理開始後は、ALTER TABLESPACE ステートメントの REDUCE STOP 節を使用して処理を停止できます。 移動されたエクステントはすべてコミットされ、可能な限り最高水準点が低くされて、新しい (より低い) 最高水準点までコンテナーがサイズ変更されます。

DMS 表スペース

DMS 表スペースは次の 2 つの方法で削減できます。

コンテナー縮小のみ
このオプションでは、エクステントは移動されません。 データベース・マネージャーは、まず削除がペンディング中のエクステントを解放して、コンテナーのサイズの削減を試みます (リカバリー性の確保のために、削除ペンディング中のエクステントの一部を削除できないことがあるので、そうしたエクステントの一部が残る可能性もあります。) 最高水準点が解放されるエクステントの中にある場合、最高水準点は引き下げられます。 それ以外の場合、最高水準点に変更は加えられません。 次に、コンテナーは、表スペースの総量が最高水準点と同じかそれよりもやや大きくなるように、サイズ変更されます。 この操作は、ALTER TABLESPACE ステートメントの REDUCE database-container 節を単独で使用して実行されます。
最高水準点の引き下げのみ
このオプションでは、最大数のエクステントを移動して最高水準点を引き下げますが、コンテナーのサイズ変更操作は実行されません。 この操作は、ALTER TABLESPACE ステートメントの LOWER HIGH WATER MARK 節を単独で使用して実行されます。
最高水準点の引き下げとコンテナー・サイズの削減は、自動ストレージ表スペースの場合、組み合わせられた 1 つの自動的な操作です。 一方、DMS 表スペースの場合、最高水準点の引き下げとコンテナー・サイズ縮小の両方を実現するには、次の 2 つの操作を実行する必要があります。
  1. まず、ALTER TABLESPACE ステートメントの LOWER HIGH WATER MARK 節を使用して、表スペースの最高水準点を下げる必要があります。
  2. 次に、ALTER TABLESPACE ステートメントの REDUCE database-container 節を単独で使用して、コンテナーのサイズ変更操作を実行します。

エクステントの移動処理開始後は、ALTER TABLESPACE ステートメントの LOWER HIGH WATER MARK STOP 節を使用して処理を停止できます。 移動されたエクステントはすべてコミットされ、最高水準点はその新しい値まで削減されます。

例 1: 自動ストレージ表スペースのサイズを最大量削減する。

データベースに 1 つの自動ストレージ表スペース TS と 3 つの表 (T1、T2、および T3) があるとして、表 T1 と T3 をドロップします。
   DROP TABLE T1 
   DROP TABLE T3 
この時点で、エクステントが空になっている場合、次のステートメントを実行すると、表 T1 と T3 で使用されていたエクステントが再利用されることになり、表スペースの最高水準点が削減されます。
   ALTER TABLESPACE TS REDUCE MAX

例 2: 自動ストレージ表スペースのサイズを一定量削減する。

データベースに 1 つの自動ストレージ表スペース TS と 2 つの表 (T1 と T2) があるとします。 次に、表 T1 をドロップします。
   DROP TABLE T1 
  
続いて、次のステートメントを使用して、表スペースのサイズを 1 MB 削減します。
   ALTER TABLESPACE TS REDUCE SIZE 1M
または、次のようなステートメントを使用して、表スペースの既存サイズのパーセントで表スペースを削減することもできます。
   ALTER TABLESPACE TS REDUCE SIZE 5 PERCENT

例 3: 最高水準点より下に空きスペースがある場合に自動ストレージ表スペースのサイズを削減する。

例 1 と同様、データベースに 1 つの自動ストレージ表スペース TS と 3 つの表 (T1、T2、および T3) があるとします。 今回は、T2 と T3 をドロップすると、最高水準点のすぐ下に 5 セットの空きエクステントができます。 この例の各エクステントは 2 つの 4 KB のページで構成されているとすると、実際には 40 KB の空きスペースが最高水準点のすぐ下にあることになります。 次のようなステートメントを発行するとします。
   ALTER TABLESPACE TS REDUCE SIZE 32K
データベース・マネージャーは、エクステントを移動しなくても、最高水準点を下げてコンテナー・サイズを削減できます。 このシナリオを 図 2 に示します。
図 2. エクステント移動の必要がない最高水準点の引き下げ
エクステントを移動せずに最高水準点を下げてコンテナー・サイズを削減する図。

例 4: DMS 表スペースのサイズの削減

データベースに 1 つの DMS 表スペース TS と 3 つの表 (T1、T2、および T3) があるとします。 次に、表 T1 と T3 をドロップします。
   DROP TABLE T1 
   DROP TABLE T3 
DMS 表スペースでの最高水準点の引き下げとコンテナー・サイズの削減は、2 つの操作で行います。 まず、次のステートメントを使用してエクステントを移動し、最高水準点を下げます。
   ALTER TABLESPACE TS LOWER HIGH WATER MARK 
次に、次のようなステートメントを使用してコンテナーのサイズを削減します。
   ALTER TABLESPACE TS REDUCE (ALL CONTAINERS 5 M)