34 DBMS_COMPRESSION

DBMS_COMPRESSIONパッケージは、アプリケーションの正しい圧縮レベルを簡単に選択できるインタフェースを提供します。

この章のトピックは、次のとおりです:

34.1 DBMS_COMPRESSIONの概要

DBMS_COMPRESSIONパッケージは、データベース環境内で圧縮に関連する情報を収集します。これには、パーティション化された表およびパーティション化されていない表について圧縮率を推測し、以前に圧縮された表に関する行レベルの圧縮情報を収集するツールが含まれます。これによって、圧縮に関連した決定を行うための適切な情報が得られます。

34.2 DBMS_COMPRESSIONのセキュリティ・モデル

DBMS_COMPRESSSIONパッケージはAUTHID CURRENT USERで定義されるため、現在のユーザーの権限で実行されます。

34.3 DBMS_COMPRESSIONの定数

DBMS_COMPRESSIONパッケージでは、パラメータ値の指定に使用できる定数が使用されます。

これらの定数を、次の表に示します。

表34-1 DBMS_COMPRESSIONの定数 - 圧縮タイプ

定数 タイプ 説明

COMP_NOCOMPRESS

NUMBER

1

圧縮なし

COMP_ADVANCED

NUMBER

2

高度な行圧縮

COMP_QUERY_HIGH

NUMBER

4

問合せ用の高ウェアハウス圧縮(ハイブリッド列圧縮)

COMP_QUERY_LOW

NUMBER

8

問合せ用の低ウェアハウス圧縮(ハイブリッド列圧縮)

COMP_ARCHIVE_HIGH

NUMBER

16

高アーカイブ圧縮(ハイブリッド列圧縮)

COMP_ARCHIVE_LOW

NUMBER

32

低アーカイブ圧縮(ハイブリッド列圧縮)

COMP_BLOCK

NUMBER

64

圧縮ブロック

COMP_LOB_HIGH

NUMBER

128

LOB操作のための高圧縮レベル

COMP_LOB_MEDIUM

NUMBER

256

LOB操作のための中圧縮レベル

COMP_LOB_LOW

NUMBER

512

LOB操作のための低圧縮レベル

COMP_INDEX_ADVANCED_HIGH

NUMBER

1024

索引のための高圧縮レベル

COMP_INDEX_ADVANCED_LOW

NUMBER

2048

索引のための低圧縮レベル

COMP_RATIO_LOB_MINROWS

NUMBER

1000

LOB圧縮率が見積られるオブジェクトの必要最低限のLOB数

COMP_BASIC

NUMBER

4096

基本表圧縮

COMP_RATIO_LOB_MAXROWS

NUMBER

5000

LOB圧縮率の計算に使用されるLOBの最大数

COMP_INMEMORY_NOCOMPRESS

NUMBER

8192

インメモリー圧縮なし

COMP_INMEMORY_DML

NUMBER

16384

DMLのためのインメモリー圧縮レベル

COMP_INMEMORY_QUERY_LOW

NUMBER

32768

問合せパフォーマンスのために最適化されたインメモリー圧縮レベル

COMP_INMEMORY_QUERY_HIGH

NUMBER

65536

問合せパフォーマンスおよび領域の節約に対して最適化されたインメモリー圧縮レベル

COMP_INMEMORY_CAPACITY_LOW

NUMBER

131072

容量を最適化するインメモリー低圧縮レベル

COMP_INMEMORY_CAPACITY_HIGH

NUMBER

262144

容量を最適化するインメモリー高圧縮レベル

COMP_RATIO_MINROWS

NUMBER

1000000

HCC比が見積もられるオブジェクトの必要最低限の行数

COMP_RATIO_ALLROWS

NUMBER

-1

オブジェクトのすべての行を使用してHCC比が見積もられたことを示します。

OBJTYPE_TABLE

PLS_INTEGER

1

圧縮率を見積もるオブジェクトをタイプ表として識別します。

OBJTYPE_INDEX

PLS_INTEGER

2

圧縮率が見積もられるオブジェクトをタイプ索引として識別します。

ノート:

ハイブリッド列圧縮は特定のOracleストレージ・システムの機能です。詳細は、『Oracle Database概要』を参照してください。

34.4 DBMS_COMPRESSIONのデータ構造

DBMS_COMPRESSIONパッケージでは、レコード・タイプとタイプを定義します。

レコード・タイプ

COMPRECレコード・タイプ

34.4.1 COMPRECレコード・タイプ

COMPRECレコード・タイプは、表の個々の索引圧縮率を計算するためのレコードです。

構文

TYPE COMPREC IS RECORD(
  ownname           varchar2(255),
  objname           varchar2(255),
  blkcnt_cmp        PLS_INTEGER,
  blkcnt_uncmp      PLS_INTEGER,
  row_cmp           PLS_INTEGER,
  row_uncmp         PLS_INTEGER,
  cmp_ratio         NUMBER,
  objtype           PLS_INTEGER);

フィールド

表34-2 COMPRECの属性

フィールド 説明

ownname

オブジェクト所有者のスキーマ。

objname

オブジェクト名

blkcnt_cmp

オブジェクトの圧縮されたサンプルに使用されるブロック数。

blkcnt_uncmp

オブジェクトの圧縮解除されたサンプルに使用されるブロック数。

row_cmp

オブジェクトの圧縮されたサンプルにあるブロック内の行数。

row_uncmp

オブジェクトの圧縮解除されたサンプルにあるブロック内の行数。

cmp_ratio

圧縮比、blkcnt_uncmpblkcnt_cmpで割った値。

objtype

オブジェクトのタイプ

34.4.2 COMPRECLIST表タイプ

COMPRECLISTは、COMPRECレコード・タイプの表タイプです。

構文

TYPE compreclist IS TABLE OF comprec;

34.5 DBMS_COMPRESSIONサブプログラムの要約

DBMS_COMPRESSIONパッケージでは、GET_COMPRESSION_RATIOプロシージャおよびGET_COMPRESSION_TYPEファンクションのサブプログラムが使用されます。

表34-3 DBMS_COMPRESSIONパッケージのサブプログラム

サブプログラム 説明

GET_COMPRESSION_RATIOプロシージャ

表の圧縮比を分析し、表の圧縮率に関する情報を提供します。

GET_COMPRESSION_TYPEファンクション

特定の行に対する圧縮タイプを戻します。

34.5.1 GET_COMPRESSION_RATIOプロシージャ

このプロシージャは、表または索引の圧縮比を分析し、オブジェクトの圧縮率に関する情報を提供します。ユーザーは様々なパラメータを入力して、異なる圧縮タイプを選択的に分析できます。

構文

次のようにオブジェクト(表または索引。デフォルトは表)の圧縮率を取得します。

DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
   scratchtbsname        IN     VARCHAR2, 
   ownname               IN     VARCHAR2, 
   objname               IN     VARCHAR2,
   subobjname            IN     VARCHAR2,
   comptype              IN     NUMBER,
   blkcnt_cmp            OUT    PLS_INTEGER,
   blkcnt_uncmp          OUT    PLS_INTEGER,
   row_cmp               OUT    PLS_INTEGER,
   row_uncmp             OUT    PLS_INTEGER,
   cmp_ratio             OUT    NUMBER,
   comptype_str          OUT    VARCHAR2,
   subset_numrows        IN     NUMBER  DEFAULT COMP_RATIO_MINROWS,
   objtype               IN     PLS_INTEGER DEFAULT OBJTYPE_TABLE); 

次のように、LOBの圧縮率を取得します。

DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
   scratchtbsname        IN     VARCHAR2,
   tabowner              IN     VARCHAR2,
   tabname               IN     VARCHAR2,
   lobname               IN     VARCHAR2,
   partname              IN     VARCHAR2,
   comptype              IN     NUMBER,
   blkcnt_cmp            OUT    PLS_INTEGER,
   blkcnt_uncmp          OUT    PLS_INTEGER,
   lobcnt                OUT    PLS_INTEGER,
   cmp_ratio             OUT    NUMBER,
   comptype_str          OUT    VARCHAR2,
   subset_numrows        IN     number DEFAULT COMP_RATIO_LOB_MAXROWS);

表のすべての索引の圧縮率を取得します。圧縮率はコレクションとして戻されます。

DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
  scratchtbsname        IN     VARCHAR2,
  ownname               IN     VARCHAR2,
  tabname               IN     VARCHAR2,
  comptype              IN     NUMBER,
  index_cr              OUT    DBMS_COMPRESSION.COMPRECLIST,
  comptype_str          OUT    VARCHAR2,
  subset_numrows        IN     NUMBER DEFAULT COMP_RATIO_INDEX_MINROWS);

パラメータ

表34-4 GET_COMPRESSION_RATIOプロシージャのパラメータ

パラメータ 説明

scratchtbsname

分析に使用できる一時スクラッチ表領域。

ownname / tabowner

分析する表のスキーマ。

tabname

分析する表の名前。

objname

オブジェクト名

subobjname

オブジェクトのパーティションまたはサブパーティションの名前。

comptype

分析を実行する対象の圧縮タイプ。

オブジェクトが索引の場合、有効な圧縮タイプは、COMP_INDEX_ADVANCED_HIGH (値1024)およびCOMP_INDEX_ADVANCED_LOW (値2048)のみです。

ノート: COMP_BLOCK (値64)およびCOMP_BASIC (値4096)の圧縮タイプは、いずれのオブジェクト・タイプでもこのパラメータに指定できません。

blkcnt_cmp

表の圧縮されたサンプルに使用されるブロック数。

blkcnt_uncmp

表の圧縮解除されたサンプルに使用されるブロック数。

row_cmp

表の圧縮されたサンプルにあるブロック内の行数。

row_uncmp

表の圧縮解除されたサンプルにあるブロック内の行数。

cmp_ratio

圧縮比、blkcnt_uncmpblkcnt_cmpで割った値。

comptype_str

圧縮タイプを説明する文字列。

subset_numrows

圧縮比を見積もるためにサンプリングされた行数。

objtype

OBJTYPE_TABLEまたはOBJTYPE_INDEXのいずれかのオブジェクト・タイプ。

lobname

LOB列名

partname

パーティション化された表の場合は、関連したパーティション名。

lobcnt

圧縮比を見積もるために実際にサンプリングされたLOBの数。

index_cr

索引のリストおよび見積り済の圧縮率。

使用上のノート

プロシージャは、スクラッチ表領域に異なる表を作成し、これらのオブジェクトで分析を実行します。ユーザー指定の表では何も変更しません。

34.5.2 GET_COMPRESSION_TYPEファンクション

このファンクションは、特定の行に対する圧縮タイプを戻します。行が連鎖している場合は、ファンクションは先頭の圧縮タイプのみを戻し、先頭は異なる圧縮が可能であるため、中間や末尾は調べません。

構文

DBMS_COMPRESSION.GET_COMPRESSION_TYPE (
   ownname      IN    VARCHAR2, 
   tabname      IN    VARCHAR2, 
   row_id       IN    ROWID,
   subobjname   IN    VARCHAR2 DEFAULT NULL))
  RETURN NUMBER;

パラメータ

表34-5 GET_COMPRESSION_TYPEファンクションのパラメータ

パラメータ 説明

ownname

表のスキーマ名。

tabname

表の名前。

rowid

行のROWID。

subobjname

表パーティションまたは表サブパーティションの名前。

戻り値

圧縮タイプを示すフラグ(表34-1を参照)。