ADMIN_GET_INDEX_COMPRESS_INFO 表関数 - 圧縮索引情報を戻す

ADMIN_GET_INDEX_COMPRESS_INFO 表関数は、非圧縮索引について索引圧縮により見込まれる削減量を戻します。

構文

構文図を読む構文図をスキップするADMIN_GET_INDEX_COMPRESS_INFO(objecttype ,objectschema,objectname ,member,datapartitionid )

スキーマは SYSPROC です。

表関数パラメーター

objecttype
オブジェクト・タイプを示す、タイプ VARCHAR(1) の入力引数。値は以下のいずれかでなければならず、大/小文字を区別します。
  • 'T'、NULL、または空ストリング (表を示す場合)
  • 'I' (索引の場合)
objectschema
オブジェクト・スキーマを指定する、タイプ VARCHAR (128) の大/小文字を区別する入力パラメーター。
objecttype が 'T'、NULL、または空ストリング (") である場合、objectschema は表スキーマを示します。
  • objectschema が指定され、objectname が NULL または空ストリング (") の場合、指定されたスキーマのすべての表に関する情報が戻されます。
  • objectschemaobjectname の両方が指定される場合、指定された表のすべての索引に関する情報が戻されます。
objecttype が 'I' である場合、objectschema は索引スキーマを示します。
  • objectschema が指定され、objectname が NULL または空ストリング (") の場合、指定されたスキーマのすべての索引に関する情報が戻されます。
  • objectschemaobjectname の両方が指定される場合、指定された索引に関する情報が戻されます。
  • objectschemaobjectname のどちらも指定されない場合、すべてのスキーマのすべての索引に関する情報が戻されます。

objectname が指定され、objectschema が指定されない場合、関数が SQL エラー を戻します。 値が NULL または空ストリング (") である場合、パラメーター値は未指定であるといいます。

objectname
オブジェクト名を指定する、タイプ VARCHAR (128) の大/小文字を区別する入力パラメーター。 objectschema パラメーターの説明を参照してください。
member
データベース・メンバー番号を指定するタイプ INTEGER の入力パラメーター。 指定されている場合、指定されたデータベース・メンバーに存在する索引に関する情報のみが戻されます。すべてのアクティブ・データベース・メンバーに関してデータが戻されるように指定するには、member パラメーター値を -2 または NULL に設定します。 単一メンバー環境では、-2 または NULL を指定します。
datapartitionid
データ・パーティション ID を指定するタイプ INTEGER の入力パラメーター。指定されている場合、指定されたデータ・パーティションで定義された索引パーティションに関する情報のみが戻されます。 データ・パーティション ID は、SYSCAT.DATAPARTITIONS ビューにある DATAPARTITIONID に対応します。すべてのデータ・パーティションに関してデータが戻されるように指定するには、datapartitionid パラメーター値を -2 または NULL に設定します。 非パーティション索引の場合は、-2、0、または NULL を指定します。

許可

このルーチンを実行するには、以下のいずれかの権限が必要です。
  • ルーチンに対する EXECUTE 特権
  • DATAACCESS 権限
  • DBADM 権限
  • SQLADM 権限

デフォルトの PUBLIC 特権

制限のないデータベースでは、この関数が自動的に作成されると、EXECUTE 特権が PUBLIC に付与されます。

使用上の注意

  • 既存の索引についての圧縮による実際の削減量を取得したい場合、この関数は使用しないでください。その場合は代わりに (統計が最新でなければ) RUNSTATS コマンドを実行し、次のカタログ値のいずれかまたは両方を照会します。
    • SYSCAT.INDEXES.PCTPAGESSAVED
    • SYSCAT.INDEXPARTITIONS.PCTPAGESSAVED

データベースのマイグレーション後は、すべての既存の索引は圧縮解除されます。 データベース・パーティション番号 2 に置かれている、データ・パーティション ID が 3 の表「S.T1」について、既存の索引の索引圧縮による節約の可能性を見積もることもできます。この例では、S はスキーマ名、T1 は表名であり、T1 は圧縮されていません

  SELECT compress_attr, iid, dbpartitionnum, index_compressed,
      pct_pages_saved, num_leaf_pages_saved 
    FROM TABLE(sysproc.admin_get_index_compress_info('', 'S', 'T1', 2, 3)) 
    AS t

以下は、このステートメントからの出力例です。

COMPRESS_ATTR       IID DBPARTITIONNUM INDEX_COMPRESSED ...
------------- --------- -------------- ---------------- ...
N                     1              2 N                ...
N                     2              2 N                ...
... PCT_PAGES_SAVED NUM_LEAF_PAGES_SAVED
... --------------- --------------------
...              50                  200
...              45                  150

圧縮による節約を行う価値があると判断し、索引圧縮を使用可能にしたいと考えます。

  ALTER INDEX INDEX1 compress yes
  ALTER INDEX INDEX2 compress yes
  REORG INDEXES all FOR table S.T1

時間の経過とともに、表の新規索引を作成する必要について判断し、圧縮する前に索引圧縮によってこれらの索引についてどれほど節約されるかを見積もることもできます。 さらに、すでに圧縮済みの索引から圧縮統計を参照することもできます。

  SELECT compress_attr, iid, dbpartitionnum, index_compressed,
      pct_pages_saved,  num_leaf_pages_saved 
    FROM TABLE(sysproc.admin_get_index_compress_info('', 'S', 'T1', 2, 3))
    AS t

以下は、このステートメントからの出力例です。

COMPRESS_ATTR       IID DBPARTITIONNUM INDEX_COMPRESSED ...
------------- --------- -------------- ---------------- ...
Y                     1              2 Y                ...
Y                     2              2 Y                ...
N                     3              2 N                ...
N                     4              2 N                ...
... PCT_PAGES_SAVED NUM_LEAF_PAGES_SAVED
... --------------- --------------------
...              -1                   -1
...              -1                   -1
...              58                  230
...              49                  140

index_compressed 列で示されているように、最初の 2 つの索引がすでに圧縮されているため、ステートメントはシステム・カタログから値が戻されます。 この場合、カタログからの値は収集されませんでした。

表に対して RUNSTATS を実行した後、索引関数を次回実行するときに、訂正された結果が生成されます。

  RUNSTATS ON TABLE S.T1 FOR INDEXES ALL
  SELECT compress_attr, iid, dbpartitionnum, index_compressed,
      pct_pages_saved, num_leaf_pages_saved 
    FROM TABLE(sysproc.admin_get_index_compress_info('', 'S', 'T1', 2, 3))
    AS t

以下は、このステートメントからの出力例です。

COMPRESS_ATTR       IID DBPARTITIONNUM INDEX_COMPRESSED ...
------------- --------- -------------- ---------------- ...
Y                     1              2 Y                ...
Y                     2              2 Y                ...
N                     3              2 N                ...
N                     4              2 N                ...
... PCT_PAGES_SAVED NUM_LEAF_PAGES_SAVED
... --------------- --------------------
...              50                  200
...              45                  150
...              58                  230
...              49                  140

戻される情報

表 1. ADMIN_GET_INDEX_COMPRESS_INFO によって戻される情報
列名 データ・タイプ 説明
INDSCHEMA VARCHAR(128) index_schema - 索引スキーマ・モニター・エレメント
INDNAME VARCHAR(128) index_name - 索引名モニター・エレメント
TABSCHEMA VARCHAR(128) table_schema - 表スキーマ名モニター・エレメント
TABNAME VARCHAR(128) table_name - 表名モニター・エレメント
DBPARTITIONNUM SMALLINT dbpartitionnum - データベース・パーティション番号モニター・エレメント
IID SMALLINT iid - 索引 ID モニター・エレメント
DATAPARTITIONID INTEGER データ・パーティション ID。
COMPRESS_ATTR CHAR(1) 索引の COMPRESSION 属性の状態。
  • Y = 索引圧縮は使用可能
  • N = 索引圧縮は使用不可
INDEX_COMPRESSED CHAR(1) 物理索引形式。
  • Y = 索引は圧縮形式である
  • N = 索引は非圧縮形式である
物理索引形式が圧縮属性と一致しない場合、索引を定義済み形式に変換するには索引の再編成が必要です。この関数を実行したときに表または索引でエラーが発生した場合、この値は NULL です。
PCT_PAGES_SAVED SMALLINT 索引が物理的に圧縮されていない (INDEX_COMPRESSED が N である) 場合、この値は、索引が実際に圧縮されているかのように、節約されるリーフ・ページの見積パーセントを表します。 索引が物理的に圧縮されている (INDEX_COMPRESSED が Y である) 場合、この値は、システム・カタログ・ビュー (SYSCAT.INDEXES または SYSCAT.INDEXPARTITIONS のいずれか) からの PCTPAGESSAVED 値をレポートします。
注: この値は、パーティション・データベース環境のデータベース・パーティションごとの索引または索引パーティションの各項目で同じになります。 この関数を実行したときに表または索引でエラーが発生した場合、この値は NULL です。
NUM_LEAF_PAGES_SAVED BIGINT 索引が物理的に圧縮されていない (INDEX_COMPRESSED が N である) 場合、この値は、索引が実際に圧縮されているかのように、節約されるリーフ・ページ数の見積もりを表します。 索引が物理的に圧縮されている (INDEX_COMPRESSED が Y である) 場合、この値は、システム・カタログ・ビュー (SYSCAT.INDEXES または SYSCAT.INDEXPARTITIONS のいずれか) から PCTPAGESSAVED および NLEAF 値に基づいて、節約される計算済みリーフ・ページ数をレポートします。 PCTPAGESSAVED または NLEAF のいずれかが無効値 (-1) である場合、この値も -1 に設定されます。
注: この値は、パーティション・データベース環境のデータベース・パーティションごとの索引または索引パーティションの各項目で同じになります。 この関数を実行したときに表または索引でエラーが発生した場合、この値は NULL です。