39 DBMS_COMPRESSION
DBMS_COMPRESSION
パッケージは、アプリケーションの正しい圧縮レベルを簡単に選択できるインタフェースを提供します。
この章のトピックは、次のとおりです:
39.1 DBMS_COMPRESSIONの概要
DBMS_COMPRESSION
パッケージは、データベース環境内で圧縮に関連する情報を収集します。これには、パーティション化された表およびパーティション化されていない表について圧縮率を推測し、以前に圧縮された表に関する行レベルの圧縮情報を収集するツールが含まれます。これによって、圧縮に関連した決定を行うための適切な情報が得られます。
39.2 DBMS_COMPRESSIONのセキュリティ・モデル
DBMS_COMPRESSSION
パッケージはAUTHID CURRENT USER
で定義されるため、現在のユーザーの権限で実行されます。
39.3 DBMS_COMPRESSIONの定数
DBMS_COMPRESSION
パッケージでは、パラメータ値の指定に使用できる定数が使用されます。
これらの定数を、次の表に示します。
表39-1 DBMS_COMPRESSIONの定数 - 圧縮タイプ
定数 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
圧縮なし |
|
|
|
高度な行圧縮 |
|
|
|
問合せ用の高ウェアハウス圧縮(ハイブリッド列圧縮) |
|
|
|
問合せ用の低ウェアハウス圧縮(ハイブリッド列圧縮) |
|
|
|
高アーカイブ圧縮(ハイブリッド列圧縮) |
|
|
|
低アーカイブ圧縮(ハイブリッド列圧縮) |
|
|
|
圧縮ブロック |
|
|
|
LOB操作のための高圧縮レベル |
|
|
|
LOB操作のための中圧縮レベル |
|
|
|
LOB操作のための低圧縮レベル |
|
|
|
索引のための高圧縮レベル |
|
|
|
索引のための低圧縮レベル |
|
|
|
LOB圧縮率が見積られるオブジェクトの必要最低限のLOB数 |
|
|
|
基本表圧縮 |
|
|
|
LOB圧縮率の計算に使用されるLOBの最大数 |
|
|
|
インメモリー圧縮なし |
|
|
|
DMLのためのインメモリー圧縮レベル |
|
|
|
問合せパフォーマンスのために最適化されたインメモリー圧縮レベル |
|
|
|
問合せパフォーマンスおよび領域の節約に対して最適化されたインメモリー圧縮レベル |
|
|
|
容量を最適化するインメモリー低圧縮レベル |
|
|
|
容量を最適化するインメモリー高圧縮レベル |
|
|
|
HCC比が見積もられるオブジェクトの必要最低限の行数 |
|
|
|
オブジェクトのすべての行を使用してHCC比が見積もられたことを示します。 |
|
|
|
圧縮率を見積もるオブジェクトをタイプ表として識別します。 |
|
|
2 |
圧縮率が見積もられるオブジェクトをタイプ索引として識別します。 |
ノート:
ハイブリッド列圧縮は特定のOracleストレージ・システムの機能です。詳細は、『Oracle Database概要』を参照してください。
39.4 DBMS_COMPRESSIONのデータ構造
39.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);
フィールド
表39-2 COMPRECの属性
フィールド | 説明 |
---|---|
|
オブジェクト所有者のスキーマ。 |
|
オブジェクト名 |
|
オブジェクトの圧縮されたサンプルに使用されるブロック数。 |
|
オブジェクトの圧縮解除されたサンプルに使用されるブロック数。 |
|
オブジェクトの圧縮されたサンプルにあるブロック内の行数。 |
|
オブジェクトの圧縮解除されたサンプルにあるブロック内の行数。 |
|
圧縮比、 |
|
オブジェクトのタイプ |
39.5 DBMS_COMPRESSIONサブプログラムの要約
DBMS_COMPRESSION
パッケージでは、GET_COMPRESSION_RATIO
プロシージャおよびGET_COMPRESSION_TYPE
ファンクションのサブプログラムが使用されます。
表39-3 DBMS_COMPRESSIONパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
表の圧縮比を分析し、表の圧縮率に関する情報を提供します。 |
|
特定の行に対する圧縮タイプを戻します。 |
39.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);
パラメータ
表39-4 GET_COMPRESSION_RATIOプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
分析に使用できる一時スクラッチ表領域。 |
|
分析する表のスキーマ。 |
|
分析する表の名前。 |
|
オブジェクト名 |
|
オブジェクトのパーティションまたはサブパーティションの名前。 |
|
分析を実行する対象の圧縮タイプ。 オブジェクトが索引の場合、有効な圧縮タイプは、 ノート: |
|
表の圧縮されたサンプルに使用されるブロック数。 |
|
表の圧縮解除されたサンプルに使用されるブロック数。 |
|
表の圧縮されたサンプルにあるブロック内の行数。 |
|
表の圧縮解除されたサンプルにあるブロック内の行数。 |
|
圧縮比、 |
|
圧縮タイプを説明する文字列。 |
|
圧縮比を見積もるためにサンプリングされた行数。 |
|
|
|
LOB列名 |
|
パーティション化された表の場合は、関連したパーティション名。 |
|
圧縮比を見積もるために実際にサンプリングされたLOBの数。 |
|
索引のリストおよび見積り済の圧縮率。 |
例
次の例は、高度な行圧縮の圧縮率を見積もる方法を示しています。
SET SERVEROUTPUT ON
DECLARE
1_blkcnt_cmp PLS_INTEGER;
1_blkcnt_uncmp PLS_INTEGER;
1_row_cmp PLS_INTEGER;
1_row_uncmp PLS_INTEGER;
1_cmp_ratio NUMBER;
1_comptype_str VARCHAR2(32767);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
scratchtbsname => 'USERS' ,
ownname => 'TEST' ,
objname => 'SALES' ,
subobjname => NULL ,
comptype => DBMS_COMPRESSION.COMP_ADVANCED,
blkcnt_cmp => 1_blkcnt_cmp,
blkcnt_uncmp => 1_blkcnt_uncmp,
row_cmp => 1_row_cmp,
row_uncmp => 1_row_uncmp,
cmp_ratio => 1_cmp_ratio,
comptype_str => 1_comptype_str,
subset_numrows => DBMS_COMPRESSION.comp_ratio_minrows,
objtype => DBMS_COMPRESSION.objtype_table
);
DBMS_OUTPUT.put_line( 'Number of blocks used by the compressed sample of the object : ' || 1_blkcnt_cmp);
DBMS_OUTPUT.put_line( 'Number of blocks used by the uncompressed sample of the object : ' || 1_blkcnt_uncmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in compressed sample of the object : ' || 1_row_cmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in uncompressed sample of the object : ' || 1_row_uncmp);
DBMS_OUTPUT.put_line( 'Estimated Compression Ratio of Sample : ' || 1_cmp_ratio);
DBMS_OUTPUT.put_line( 'Compression Type : ' || 1_comptype_str);
END;
/
高度な行圧縮(表全体)の圧縮アドバイザ見積りの出力:
Number of blocks used by the compressed sample of the object : 165 Number of blocks used by the uncompressed sample of the object : 629 Number of rows in a block in compressed sample of the object : 599 Number of rows in a block in uncompressed sample of the object : 157 Estimated Compression Ratio of Sample : 3.8 Compression Type : “Compress Advanced”
次の例は、拡張索引圧縮(低)の圧縮率を見積もる方法を示しています。
SET SERVEROUTPUT ON
DECLARE
1_blkcnt_cmp PLS_INTEGER;
1_blkcnt_uncmp PLS_INTEGER
1_row_cmp PLS_INTEGER;
1_row_uncmp PLS_INTEGER;
1_cmp_ratio NUMBER;
1_comptype_str VARCHAR2(32767);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
scratchtbsname => 'USERS' ,
ownname => 'TEST' ,
objname => 'SALES_IDX' ,
subobjname => NULL ,
comptype => DBMS_COMPRESSION.COMP_INDEX_ADVANCED_LOW,
blkcnt_cmp => 1_blkcnt_cmp,
blkcnt_uncmp => 1_blkcnt_uncmp,
row_cmp => 1_row_cmp,
row_uncmp => 1_row_uncmp,
cmp_ratio => 1_cmp_ratio,
comptype_str => 1_comptype_str,
subset_numrows => DBMS_COMPRESSION.comp_ratio_minrows,
objtype => DBMS_COMPRESSION.objtype_index
);
DBMS_OUTPUT.put_line( 'Number of blocks used by the compressed sample of the object : ' || 1_blkcnt_cmp);
DBMS_OUTPUT.put_line( 'Number of blocks used by the uncompressed sample of the object : ' || 1_blkcnt_uncmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in compressed sample of the object : ' || 1_row_cmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in uncompressed sample of the object : ' || 1_row_uncmp);
DBMS_OUTPUT.put_line( 'Estimated Compression Ratio of Sample : ' || 1_cmp_ratio);
DBMS_OUTPUT.put_line( 'Compression Type : ' || 1_comptype_str);
END;
/
拡張索引圧縮(低)の圧縮アドバイザ見積りの出力:
Number of blocks used by the compressed sample of the object : 243 Number of blocks used by the uncompressed sample of the object : 539 Number of rows in a block in compressed sample of the object : 499 Number of rows in a block in uncompressed sample of the object : 145 Estimated Compression Ratio of Sample : 2.2 Compression Type : “Compress Advanced Low”
次の例は、拡張LOB圧縮(中)の圧縮率を見積もる方法を示しています。
SET SERVEROUTPUT ON
DECLARE
1_blkcnt_cmp PLS_INTEGER;
1_blkcnt_uncmp PLS_INTEGER;
1_row_cmp PLS_INTEGER;
1_lobcnt PLS_INTEGER;
1_cmp_ratio NUMBER;
1_comptype_str VARCHAR2(32767);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
scratchtbsname => 'USERS' ,
tabowner => 'TEST' ,
tabname => 'PARTS' ,
lobname => 'PART_DESCRIPTION' ,
partname => NULL ,
comptype => DBMS_COMPRESSION.COMP_LOB_MEDIUM,
blkcnt_cmp => 1_blkcnt_cmp,
blkcnt_uncmp => 1_blkcnt_uncmp,
row_cmp => 1_row_cmp,
lobcnt => 1_lobcnt,
cmp_ratio => 1_cmp_ratio,
comptype_str => 1_comptype_str,
subset_numrows => DBMS_COMPRESSION.comp_ratio_lob_maxrows
);
DBMS_OUTPUT.put_line( 'Number of blocks used by the compressed sample of the object : ' || 1_blkcnt_cmp);
DBMS_OUTPUT.put_line( 'Number of blocks used by the uncompressed sample of the object : ' || 1_blkcnt_uncmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in compressed sample of the object : ' || 1_row_cmp);
DBMS_OUTPUT.put_line( 'Number of LOBS actually sampled : ' || 1_lobcnt);
DBMS_OUTPUT.put_line( 'Estimated Compression Ratio of Sample : ' || 1_cmp_ratio);
DBMS_OUTPUT.put_line( 'Compression Type : ' || 1_comptype_str);
END;
/
拡張LOB圧縮(中)の圧縮アドバイザ見積りの出力:
Number of blocks used by the compressed sample of the object : 199 Number of blocks used by the uncompressed sample of the object : 389 Number of rows in a block in compressed sample of the object : 293 Number of LOBS actually sampled : 55 Estimated Compression Ratio of Sample : 1.9 Compression Type : “Compress Medium”
使用上のノート
プロシージャは、スクラッチ表領域に異なる表を作成し、これらのオブジェクトで分析を実行します。ユーザー指定の表では何も変更しません。
39.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;
パラメータ
表39-5 GET_COMPRESSION_TYPEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
表の名前。 |
|
行のROWID。 |
|
表パーティションまたは表サブパーティションの名前。 |
戻り値
圧縮タイプを示すフラグ(表39-1を参照)。