LOAD ユーティリティーを使用したデータの圧縮

LOADを使用して、圧縮を定義したテーブルスペースまたはパーティション内のデータを圧縮することができます。 圧縮による定義 は、表スペースまたはパーティションが COMPRESS YES、 COMPRESS YES FIXEDLENGTH 、または COMPRESS YES HUFFMAN で定義されていることを意味します。

LOAD はコンプレッション・ディクショナリーを作成します。 ディクショナリーの作成が終わると、データのロード時にデータが圧縮されます。 コンプレッション・ディクショナリーが既に存在する場合は、LOAD で新しく作成しないように指定できます。 別の方法として、REORG TABLESPACE ユーティリティーを実行してデータを圧縮することもできます。

始める前に

LOADを使用してデータを圧縮するには、事前にパーティション表スペース内の表スペースまたはパーティションを圧縮して定義する必要があります。

このタスクについて

LOAD は、レコードのロード中にコンプレッション・ディクショナリーを作成します。 ディクショナリーが作成されるまで、データは圧縮されません。 初期 LOAD では、ディクショナリーの作成に使用したレコードを圧縮するために戻ることはしません。処理コストを節約するためです。 ディクショナリーが作成された後、残りのデータはロードされるときに圧縮されます。

ディクショナリーの作成に必要なレコード数は、データ内のパターンの出現頻度に応じて決まります。 大きなデータ・セットの場合、行の総数のごく一部を使ってディクショナリーが作成されます。 最良の圧縮結果を得るには、データをロードするたびに新しいディクショナリーを作成します。 表に DATA CAPTURE CHANGES がアクティブになっている場合は、以前に存在していたすべてのディクショナリーがログに書き込まれます。

増加対応パーティション表スペースの場合、このユーティリティーは、ディクショナリーを 1 つ 作成し、すべてのパーティションで、同じディクショナリー・ページにデータが設定 されます。

圧縮を使用して定義されている XML 表スペースの場合、 REORG TABLESPACE ユーティリティーがその表スペースで初めて実行されるまで、圧縮は発生しません。

プロシージャー

LOAD ユーティリティーを使用してデータを圧縮するには、以下のようにします。

  • 圧縮辞書がまだ存在しない場合、または新しい辞書を作成する場合は、LOAD文でREPLACE、RESUME NO、またはRESUME YESオプションを次のように指定します。
    REPLACE
    SIMPLE 表スペースの場合、新しいコンプレッション・ディクショナリーを作成するために LOAD REPLACE を指定する必要があります。 SIMPLE 表スペースの場合に RESUME YES または RESUME NO を指定すると、LOAD は既存のディクショナリー (存在する場合) を保持します。 別の方法として、REORG TABLESPACE を実行することもできます。
    RESUME NO
    RESUME NO を指定した場合、表スペースは空でなければなりません。
    RESUME YES
    RESUME YES を指定した場合に、SHRLEVEL NONE が明示的または暗黙的に指定されると、表スペースが空であれば、LOAD はディクショナリーを作成します。 RESUME YES SHRLEVEL CHANGE を指定すると、テーブルスペース内のデータ量が閾値に達したときに LOAD が辞書を構築します。 Db2
  • 既存の圧縮辞書を使用してデータを圧縮する場合は、 LOAD ステートメントで KEEPDICTIONARY オプションを指定します。

    別の方法として、KEEPDICTIONARY オプションを指定して REORG TABLESPACE を実行することにより、データを圧縮することもできます。 REORG TABLESPACE に KEEPDICTIONARY を指定する方法は、処理中にデータが圧縮解除されることがないため、効率の良い方法です。 ただし、KEEPDICTIONARY を用いた REORG TABLESPACE では、圧縮の報告書は生成されま せん。 その情報を取得するには、RUNSTATS を実行してカタログ統計を更新してから、カタログの列を自分で照会してください。

    既存のコンプレッション・ディクショナリーを再使用することの利点の 1 つは、ディクショナリーを作成するためのユーティリティーの処理時間を解消できるところにあります。 次に挙げる状況では、LOAD ステートメントに KEEPDICTIONARY を指定することを検討してください。

    • 既存のディクショナリーによる圧縮で十分に満足している場合。
    • 最後のディクショナリーが REORG TABLESPACE によって作成されたものである場合。 REORG TABLESPACE のサンプリング方法では、LOAD よりも全体をよく表すディクショナリーを生成できるため、より良い圧縮結果が得られます。
    • 最後にディクショナリーを作成した後、データが大幅には変更されていない場合。

    また、パーティション化表スペースの特定のパーティションに対して、KEEPDICTIONARY を 指定することもできます。 この場合、それぞれのパーティションは、それ独自のディクショナリー を持つことになります。

    次の例に示す LOAD ステートメントでは、既存のコンプレッション・ディクショナリーを再利用しています。

    LOAD DATA
      REPLACE KEEPDICTIONARY
      INTO TABLE DSN8D10.DEPT
      ( DEPTNO    POSITION (1)     CHAR(3),
        DEPTNAME  POSITION (5)     VARCHAR,
        MGRNO     POSITION (37)    CHAR(6),
        ADMRDEPT  POSITION (44)    CHAR(3),
        LOCATION  POSITION (48)    CHAR(16) )
      ENFORCE NO
  • 既存のパーティションから別の空のパーティションに別の圧縮辞書をコピーしたい場合は、LOAD文でCOPYDICTIONARYオプションを指定し、ダミーの入力データセットを使用します。
    この場合は、そのパーティションに挿入されるデータが圧縮されます。

結果

LOAD SHRLEVEL REFERENCEまたはSHRLEVEL NONEが正常に完了すると、ユーティリティは各ターゲットページセットで使用された圧縮辞書のタイプをSYSTABLEPARTカタログテーブルのCOMPRESS_USED列に更新します。 LOAD はXML 表スペースについて COMPRESS_USED を更新しません。

次の作業

XML 表スペースの場合は、表スペースに対して REORG TABLESPACE を実行します。