REORGCHK コマンド

REORGCHK コマンドは、再編成によって使用量やディスク・スペースの改善、またはパフォーマンスの向上 (あるいはその両方) が得られる可能性があるかどうかを示す表または索引の統計を提供します。

範囲

このコマンドは、db2nodes.cfg ファイルの任意データベース区画から発行できます。 これを使用して、カタログ中の表および索引統計を更新できます。

許可

以下の権限のいずれか。
  • SYSADM、SCHEMAADM、 または DBADM 権限
  • 表に対する CONTROL 特権

必要な接続

データベース

コマンド構文

Read syntax diagramSkip visual syntax diagramREORGCHKUPDATE STATISTICSCURRENT STATISTICSON TABLE USERONSCHEMAschema-nameTABLEUSERSYSTEMALLtable-name

コマンド・パラメーター

UPDATE STATISTICS
RUNSTATS ルーチンを呼び出して、表および索引の統計を更新してから、更新後の統計を使用して、表または索引の再編成が必要かどうかを判別します。

REORGCHK が発行されたデータベース・パーティション上に表の一部が置かれている場合、ユーティリティーはそのデータベース・パーティションに対して実行されます。 このデータベース・パーティションに表が存在しない場合、その要求は、表の一部を保持しているデータベース・パーティション・グループ中の最初のデータベース・パーティションに送信されます。 その後、このデータベース・パーティションに対して RUNSTATS が実行されます。

CURRENT STATISTICS
現在の表の統計を使用して、表の再編成が必要かどうかを判断します。
ON SCHEMA schema-name
指定のスキーマの下で作成されたすべての表を検査します。
ON TABLE
USER
ランタイム許可 ID が所有する表を検査します。
SYSTEM
システムの表を検査します。
ALL
すべてのユーザーおよびシステムの表を検査します。
table-name
検査する表を指定します。 schema.table-name 形式の名前あるいは別名を使用することができます。 schema には、表作成時のユーザー名が入ります。 スキーマ名を省略した場合、現行スキーマであると想定されます。 指定された表がシステム・カタログの表である場合には、 schema は SYSIBM です。 型付き表の場合、指定する表名は階層のルート表の名前でなければなりません。

SAMPLE データベースに対して以下のコマンドを発行します。
db2 reorgchk update statistics on table system
結果出力の中で、表統計の用語 (公式 1 から 3 まで) の意味は以下のとおりです。
CARD
(CARDINALITY) 基本表の行数。
OV
(OVERFLOW) オーバーフローした行数。
NP
(NPAGES) データを含むページ数。
FP
(FPAGES) ページの合計数。
ACTBLK
マルチディメンション・クラスタリング (MDC) 表または挿入時クラスタリング (ITC) 表のアクティブ・ブロックの合計数。 このフィールドは、ORGANIZE BY 節を使用して定義された表に対してのみ適用できます。 これは、データを含む表のブロック数を示します。
TSIZE
表サイズ (バイト数)。 表 (CARD) 内の行数と行の長さの平均を基にして計算されます。 長フィールドと LOB の場合には、記述子のおおよその長さだけが使用されます。 実際の長フィールドまたは LOB データは、TSIZE にはカウントされません。
TABLEPAGESIZE
表データが存在する表スペースのページ・サイズ。
NPARTITIONS
これがパーティション表である場合は、パーティション数。そうでない場合は 1。
F1
公式 1 の結果。
この公式は、表内のオーバーフロー行数のパーセンテージを示します。
詳しくは、 F1 を参照してください。
F2
公式 2 の結果。
この公式は、表に割り振られている合計スペースに対して、その表のデータを格納するために使用されているスペースが占めるパーセンテージを示します。
詳しくは、 F2 を参照してください。
F3
公式 3 の結果。
この公式は、表の使用済みページ数のパーセンテージを示します。
詳しくは、 F3 を参照してください。
REORG
この列に表示されている各ハイフン (-) は、計算結果が、 対応する公式の設定範囲内であったことを示しています。 各アスタリスク (*) は、計算結果が、その対応する公式の設定範囲を超えたことを示しています。
  • 列の左側の- または * は、F1 (公式 1) に対応しています。
  • 列の中央の- または * は、F2 (公式 2) に対応しています。
  • 列の右側の- または * は、F3 (公式 3) に対応しています。

表の再編成は、その計算結果が公式によって設定された範囲を超える場合に、提案されます。

例えば、--- は、F1、F2、F3の式の結果が式の設定範囲内にあるため、表の再編成が推奨されないことを示します。 表記*-* は、F1とF3に表される条件がワークロードに影響するるかどうかを確認できることを示します。 F1 および F3 によって表される条件がワークロードに影響を与えている場合、表の再編成を行うことを検討してください。 この表記*--は、F1がその範囲を超える唯一の式であることを示しています。

表の使用効率を高めるための表再編成についての推奨事項を以下に示します。
注: CLASSIC 節を使用した表の再編成では、 F1、 F2、 F3 のすべてをアドレス指定できます。
  • F1 (オーバーフロー): 通常の表では、オーバーフローが多すぎると、同期入出力の実行時にパフォーマンスが低下する可能性があります。 F1 のみが推奨される場合は、REORG TABLE INPLACE CLEANUP OVERFLOWS オプションを検討してください。 このオプションでは、オーバーフローがバックグラウンドで削除されるので、表は完全に使用可能な状態のままです。
  • F2: 割り振られたページに対するパーセンテージとしてデータ量が表された表の合計サイズ。 スペースの再利用が必要な場合は、NOTRUNCATEオプションを使用せず従来の再編成またはインプレース再編成により、不要なスペースを表スペースに戻すことができますが、テーブルが完全に使用可能にならない場合があります。 MDC 表とITC表の場合、RECLAIM SPACE句はデフォルトでオンラインでスペースを再利用します。
  • F3 FPAGES に対する NPAGES: F3 では再編成が推奨されず、F2 で推奨された場合は、部分的に使用されたページが表に多数含まれている可能性があります。 この状態では、照会に対して読み込む必要があるページ数が多くなるので、パフォーマンスの問題が生じることがあります。 この場合、インプレース再編成(CLEANUP OVERFLOWS ONLYなし)で行を移動してNPAGESを削減し、テーブルを完全にオンラインのままにして、NOTRUNCATEオプションを使用してパフォーマンスを向上させることができます。 F3 で再編成が推奨され、スペースの再利用が重要な場合には、F2 で説明した方法で状況を解決できます。

The table name is truncated to 30 characters, and the ">表名は 30 文字に切り捨てられ、31列目の「">」記号は表名の切り捨てられた部分を表します。 表名の* 接尾部は、それがMDC表またはITC表であることを示します。 インデックス名の*接尾辞は、それがMDCまたはITCディメンションインデックスであることを示します。

索引統計の用語 (公式 4 から 8) の意味は、次のとおりです。
INDCARD
(INDEX CARDINALITY) 索引中の索引項目数。 索引によっては、これは、表のカーディナリティーとは異なることがあります。 例えば、XML 列上の索引の場合、索引のカーディナリティーは、表のカーディナリティーより大きいと考えられます。
LEAF
索引リーフ・ページ (NLEAF) の合計数。 この値は、索引がパーティション化されているかどうかによって、SYSCAT.INDEXES または SYSCAT.INDEXPARTITIONS の NLEAF 列から得られます。
ELEAF
疑似空白リーフ・ページ (NUM_EMPTY_LEAFS) の数

疑似空白索引リーフ・ページは、すべての RID に削除済みのマークが付いていますが、 それらが物理的には削除されていないページです。

NDEL
疑似削除された RID の数 (NUMRIDS_DELETED)

疑似削除された RID とは、削除済みのマークが付いた RID のことです。 この統計は、 疑似空白ではないリーフ・ページ上の疑似削除された RID に関して報告します。 すべての RID に削除済みのマークが付いたリーフ・ページ上の、 削除マークの付いた RID は含まれません。

KEYS
削除マークの付いていないユニーク索引項目の数 (FULLKEYCARD)
LEAF_RECSIZE
リーフ・ページ上の索引項目のレコード・サイズ。 これは、すべてのオーバーヘッドを除外した索引項目の平均サイズであり、索引に関与するすべての列から得た列の平均の長さから計算されます。
NLEAF_RECSIZE
非リーフ・ページ上の索引項目のレコード・サイズ。 これは、すべてのオーバーヘッドを除外した索引項目の平均サイズであり、索引に関与するすべての列 (INCLUDE 列を除く) から得た列の平均の長さから計算されます。
LEAF_PAGE_OVERHEAD
内部使用に備えて索引リーフ・ページ上で予約されているスペース。
NLEAF_PAGE_OVERHEAD
内部使用に備えて予約されている索引の非リーフ・ページ上のスペース。
INDEXPAGESIZE
索引が置かれている表スペースのページ・サイズ。表または索引の作成時に指定します。 指定しなかった場合、INDEXPAGESIZE の値は TABLEPAGESIZE の値と同じになります。
LVLS
索引レベルの数 (NLEVELS)
PCTFREE
各索引ページでフリー・スペースのままにしておくパーセントを指定します。 値は索引の定義時に割り当てられます。 値の範囲は 0 から 99 です。 デフォルト値は 10 です。
LEAF_RECSIZE_OVERHEAD
リーフ・ページ上の索引レコード・オーバーヘッド。 LARGE 表スペース内の表上の索引の場合、パーティション表のオーバーヘッドは 11、他の表のオーバーヘッドは 9 です。 REGULAR 表スペース内の表上の索引の場合、それぞれの値は、パーティション表の場合は 9、他の表の場合は 7 です。 このルールの唯一の例外は XML パスおよび XML 領域の索引であり、この場合のオーバーヘッドは常に 9 です。 この情報は、容易に参照できるよう、下記の表にも示されています。
NLEAF_RECSIZE_OVERHEAD
非リーフ・ページ上の索引レコード・オーバーヘッド。 LARGE 表スペース内の表上の索引の場合、パーティション表のオーバーヘッドは 14、他の表のオーバーヘッドは 12 です。 REGULAR 表スペース内の表上の索引の場合、それぞれの値は、パーティション表の場合は 12、他の表の場合は 10 です。 このルールの唯一の例外は XML パスおよび XML 領域の索引であり、この場合のオーバーヘッドは常に 12 です。 この情報は、容易に参照できるよう、下記の表にも示されています。
DUPKEYSIZE
索引リーフ・ページ上の重複キーのサイズ。 LARGE 表スペース内の表上の索引の場合、パーティション表の DUPKEYSIZE は 9、他の表の DUPKEYSIZE は 7 です。 REGULAR 表スペース内の表上の索引の場合、それぞれの値は、パーティション表の場合は 7、他の表の場合は 5 です。 このルールの唯一の例外は XML パスおよび XML 領域の索引であり、この場合の DUPKEYSIZE は常に 7 です。 この情報は、容易に参照できるよう、下記の表にも示されています。
表 1. LEAF_RECSIZE_OVERHEAD、NLEAF_RECSIZE_OVERHEAD、および DUPKEYSIZE の各値は、索引タイプ、表パーティション、および表スペース・タイプ (REGULAR 表スペース) の関数です。
変数 通常の表 (XML パスまたは領域の索引) 通常の表 (他のすべての索引) パーティション表 (すべての索引)
LEAF_RECSIZE_OVERHEAD 9 7 9
NLEAF_RECSIZE_OVERHEAD 12 10 12
DUPKEYSIZE 7 5 7
表 2. LEAF_RECSIZE_OVERHEAD、NLEAF_RECSIZE_OVERHEAD、および DUPKEYSIZE の各値は、索引タイプ、表パーティション、および表スペース・タイプ (LARGE 表スペース**) の関数です。
変数 通常の表 (XML パスまたは領域の索引) 通常の表 (他のすべての索引) パーティション表 (すべての索引)
LEAF_RECSIZE_OVERHEAD 9 9 11
NLEAF_RECSIZE_OVERHEAD 12 12 14
DUPKEYSIZE 7 7 9

**LARGE 表スペース内の表上の索引の場合、索引はラージ RID を持つと見なされます。 そのため、表の表スペースが LARGE に変換されたにも関わらず索引の再作成または再編成が未完了であると、公式によっては不正確な結果を生じることがあります。

F4
公式 4 の結果。
この公式は、この索引と同じ順序で格納されている表のパーセンテージを示します。
詳しくは、 F4 を参照してください。
注: この数式は、XML パス索引、ページ・マップ索引、または変更状態索引ではサポートされません。
F5
公式 5 の結果。
この公式は、この索引の空でないリーフ・ページの使用済みスペースのパーセンテージを示します。
+++ の表記は、結果が 999 を超えているので無効であることを示しています。 UPDATE STATISTICS オプションを指定して REORGCHK を再実行するか、 REORGCHK コマンドの前に RUNSTATSを発行します。
詳しくは、 F5 を参照してください。
注: この式は、 LEAF < 2の場合はサポートされません。
F6
公式 6 の結果。
この公式は、索引のすべての項目/キーを格納するために現在使用されているスペースに対して、レベルが 1 つ少ない索引で使用可能なスペースの推定量が占めるパーセンテージを示します。
+++ の表記は、結果が 999 を超えているので、無効である可能性があることを示しています。 UPDATE STATISTICS オプションを指定して REORGCHK を再実行するか、 REORGCHK コマンドの前に RUNSTATSを発行します。 統計が現行のものであり、有効であれば、再編成してください。
詳しくは、 F6 を参照してください。
注: この式は、 NLEVELS < 3の場合はサポートされません。
F7
公式 7 の結果。
この公式は、この索引で疑似削除された索引キー/項目のパーセンテージを示します。
詳しくは、 F7 を参照してください。
F8
公式 8 の結果。
この公式は、この索引のリーフ・ページの総数に対する空のリーフ・ページ数のパーセンテージを示します。
詳しくは、 F8 を参照してください。
REORG
この列に表示されている各ハイフン (-) は、計算結果が、 対応する公式の設定範囲内であったことを示しています。 各アスタリスク (*) は、計算結果が、その対応する公式の設定範囲を超えたことを示しています。
  • 左側の列の- または * は、F4 (公式 4) に対応しています。
  • 左から2番目の列の - または * は、F5 (式 5) に対応します。
  • 中央の列の- または * は、F6 (公式 6) に対応しています。
  • 右側の2 列目の- または * は、F7 (式 7) に対応します。
  • 右側の列の- または * は、F8 (公式 8) に対応しています。
索引を再編成する際の提案を以下に示します。
  • 公式 1、2、および 3 の計算結果が、各公式で設定されている境界を超えず、 公式 4 の計算結果が、設定されている境界を超えた場合は、 索引を再編成することをお勧めします。
  • 公式 5 または 6 (あるいはその両方) の計算結果が、各公式で設定されている境界を超えた場合は、索引の再編成の RECLAIM EXTENTS オプションを使用して索引のエクステントを再利用することをお勧めします。 RECLAIM EXTENTS オプションを使用しても公式 5 または 6 (あるいはその両方) が、公式で設定されている境界の範囲内に収まらない場合は、REBUILD オプションを設定した索引の再編成をお勧めします。
  • 式7の計算結果のみが設定された範囲を超えているが、式1、2、3、4、5、6の結果が設定された範囲内にある場合は、インデックス再編成のCLEANUPオプションでインデックスをクリーンアップすることをお勧めします。
  • 設定範囲を超える唯一の計算結果が式8の結果である場合は、インデックス再編成のCLEANUP PAGESオプションを使用して、インデックスの疑似空ページをクリーンアップすることをお勧めします。
  • admin_get_tab_info 関数および admin_get_index_info 関数の RECLAIMABLE_SPACE 列は、表および索引の再利用可能スペースの量をキロバイト単位で示します。 この値を使用して、 RECLAIM EXTENTS オプションを指定した再編成をいつ実行すべきか判断することができます。 RECLAIMABLE_SPACE の詳細、 およびスペース再利用の有効性を評価する方法については、関連リンクを参照してください。

パーティション表の場合、統計の収集時によっては、公式の結果 (5 から 8) が誤ったものになる恐れがあります。 データ・パーティションがデタッチされるとき、そのデタッチされるパーティションの索引キーは直ちにクリーンアップされるわけではありません。 ここでは、クリーンアップは保留され、キーは最終的に索引クリーナーによって除去されます。この索引クリーナーはバックグラウンドで非同期に作動しています (これは非同期の索引クリーンアップまたは AIC と呼ばれます)。 クリーンアップが保留されている索引キーが索引内に存在すると、そのような索引キーは、統計の中でキーの一部としてカウントされません。この理由は、そのような索引キーは不可視であり、既に表の一部ではなくなっているからです。 その結果、非同期の索引クリーンアップを実行する前に収集された統計は誤ったものとなります。 非同期の索引クリーンアップが完了する前に REORGCHK コマンドを発行した場合、不正確な統計に基づいて、索引の再編成や索引のクリーンアップを指示する誤ったアラームが生成される可能性があります。 非同期の索引クリーンアップの実行を開始すると、クリーンアップを必要とするデタッチされたデータ・パーティションにまだ属しているすべての索引キーが除去されるので、索引の再編成の必要がなくなることもあります。

パーティション表の場合、デタッチされたデータ・パーティションがあるなら、正確な索引統計が生成されるように、非同期の索引クリーンアップが完了した後で REORGCHK を発行することをお勧めします。 表にデタッチされたデータ・パーティションがあるかどうかを判別するために、 SYSCAT.DATAPARTITIONS カタログ・ビューおよび値の検索I(索引クリーンアップ),L(論理的に切り離された)、またはD(従属 MQT とともに切り離されます)。

使用上の注意

このコマンドは、宣言済み一時表または作成済み一時表の統計情報は表示しません。

このユーティリティーでは、ニックネームの使用はサポートされません。

新しいサーバー・リリースでは、新しい表と索引のフィーチャーが導入される可能性があります。 こうした新規フィーチャーは REORGCHK ロジック、つまり REORGCHKREORG 推奨値を計算する仕方に影響を与えることがあります。 REORGCHK がサーバーと同レベルにないクライアントから発行される場合には、サーバーと同レベルのクライアントからの場合とは異なる結果が報告される可能性があります。 REORGCHK はクライアント・アプリケーションであるため、REORGCHK はサーバーと同レベルで実行されているクライアントから実行する必要があります。 そのようにすると、最も正確なレポートが生成されます。 サーバー管理作業の場合、同レベルのクライアントとサーバーを通常は使用します。

CURRENT STATISTICS オプションを指定していなければ、 REORGCHK はデフォルトのオプションだけを使用してすべての列から統計を収集します。 特に、列グループは収集されません。 さらに、LIKE 統計が以前に収集されている場合、それらは REORGCHK によっては収集されません。 収集される統計は、カタログ表に現在保管されている統計の種類によって異なります。
  • いずれかの索引のカタログ内に詳細索引統計が存在する場合、 すべての索引の表統計および詳細索引統計が収集されます (サンプリングは行われません)。
  • 詳細索引統計が収集されない場合、 すべての索引の表統計および通常の索引統計が収集されます。
  • 分散統計が検出された場合、その表についての分散統計が収集されます。 分散統計が収集された場合、 頻度および変位値の数はデータベース構成パラメーターの設定値によって異なります。
REORGCHK は、8 つの異なる公式から得た統計を計算し、 表またはその索引の再編成によってパフォーマンスが低下するか、または改善できるのかを判別します。 表が ( NPARTITIONS * 1 エクステント・サイズ) より小か等しいページを使用する場合、各公式に基づいて、表の再編成が推奨されなくなります。 具体的には、以下のようになります。
  • 非パーティション表 ( NPARTITIONS =1 ) の場合、しきい値は以下のようになります。
    (FPAGES <= 1 extent size)
  • パーティション表では、以下のようになります。
    (FPAGES <= NPARTITIONS * 1 extent size)
  • 複数パーティションのデータベースでは、表のデータベース・パーティション・グループのデータベース・パーティションの数を考慮した後、表の再編成が推奨されないこのしきい値を次のように変更します。
    FPAGES <=  'number of database partitions in a database partition group
           of the  table' * NPARTITIONS * 1 extent size

TSIZE の計算時には、長フィールドまたは LOB データは検討の対象にはなりません。

REORGCHK は、次の公式を使用して、行の物理的なロケーションおよび表のサイズを分析します。
  • 公式 F1:
    100*OVERFLOW/CARD < 5

    表のオーバーフロー行の合計数は、行の合計数の 5% 以下でなければなりません。 オーバーフロー行は、行が更新されて、 新しい行のバイト数が古い行 (VARCHAR フィールド) のそれより大きくなる場合、 または列が既存の表に追加される場合に作成されます。 ただし、固定長の列の場合でも、表で圧縮が行われると、オーバーフローが生じることがあります。

  • 公式 F2:
    通常の表では、以下のようになります。
    100*TSIZE / ((100-TPCTFREE)/100 * (FPAGES-NPARTITIONS) * (TABLEPAGESIZE-68)) > 70

    バイト単位の表のサイズ (TSIZE) は、表に割り当てられた合計スペースの 70 % を超えていなければなりません (フリー・スペースは 30% 以下でなければなりません)。 表に割り当てられる合計スペースは、 表データが存在する表スペースのページ・サイズによって決まります (オーバーヘッド分の 68 バイトを差し引きます)。 データ・オブジェクト内で割り当てられる最終ページは、通常はいっぱいにならないため、各パーティションごとに FPAGES から 1 を引きます (これは、FPAGES-NPARTITIONS と同じです)。 表の圧縮が使用されている場合は、ディクショナリーの推定サイズを計算に入れるために FPAGES が調整されます。

    REGULAR 表スペース内の通常の表は、1 データ・ページ当たり 255 行までに制限されています。 大きいページ・サイズと短い表の行を使用する場合、行がそのページに保管される方法によって、データ・ページ・スペースが無駄になる場合があります。 この場合、公式 F2 では 70 より小さい値が取得されることがあります。 しかし、この表の再編成では、255 行の制限のためにデータ・ページ・スペースが回収されない場合があります。 無駄なスペースを使用したい場合、より小さいページ・サイズを使用するか、またはご使用の REGULAR 表スペースを LARGE 表スペースに変換し、その後表を再編成する必要があります。 これは、LARGE 表スペース内にある表には影響を与えません。

    MDC 表では、以下のようになります。
    100*TSIZE / ((ACTBLK-FULLKEYCARD) * EXTENTSIZE * (TABLEPAGESIZE-68)) > 70

    FULLKEYCARD は、MDC 表の複合ディメンション索引のカーディナリティーを示します。 エクステント・サイズは、ブロックごとのページ数です。 バイト単位の表サイズが、必要最低限のブロック数を差し引いた後の残りのブロックの 70 パーセントを超えているかどうかが、公式でチェックされます。

  • 公式 F3:
    100*NPAGES/FPAGES > 80

    まったく行を含まないページ数は、ページ合計数の 20% より少ない値にします (行が削除された後では、ページは空になります)。 前述のように、(FPAGES <= NPARTITIONS * 1 extent size) の場合は表の再編成は推奨されません。 したがって、F3は計算されません。 非区画表の場合は、 NPARTITIONS = 1。 複数区画データベースでは、この条件をFPAGES = 'number of database partitions in a database partition group of the table' * NPARTITIONS * 1 extent sizeに変わります。

    MDC 表または ITC 表の場合、この公式は、ページではなく、使用済みのブロックのパーセンテージを示します。この公式は次のとおりです。
    100 * activeblocks / 
       (
          (fpages_adjust / tExtentSize) -
          (numberOfTablePartitions * numberOfDatabasePartitions)
       )
REORGCHK は、次の公式を使用して、索引および表データに対する索引のリレーションシップを分析します。
  • 公式 F4:
    • 非パーティション表では、以下のようになります。
      CLUSTERRATIO or normalized CLUSTERFACTOR > 80

      グローバル CLUSTERFACTOR および CLUSTERRATIO では、索引キーと分散キーの相関関係が考慮に入れられます。 クラスタリング索引比率は、80% より大きくします。 複数の索引が 1 つの表に定義される場合は、これらの索引のいくつかは、 低いクラスター比率を持っています (索引順序は、表の順序と同じではありません)。 これを避けることはできません。 表を再編成する際に、必ず最も重要な索引を指定してください。 そのクラスター比率は、通常、数の多い複写キーおよび数の多い項目を含む索引には最適ではありません。

    • パーティション表では、以下のようになります。
      AVGPARTITION_CLUSTERRATIO or normalized AVGPARTITION _CLUSTERFACTOR > 80

      AVGPARTITION_CLUSTERFACTOR および AVGPARITITON_CLUSTERRATIO 値は、索引キーから見て、データ・パーティションの中でデータがどの程度クラスタリングされているかを反映します。 パーティション表は特定の索引キーに関して各データ・パーティションの中で完全にクラスタリングすることが可能ですが、それでも CLUSTERFACTOR および CLUSTERRATIO の値は低くなります。なぜなら、索引キーは表パーティション・キーの接頭部ではないからです。 最も重要な索引キーを表パーティション・キーの接頭部として使用して、表および索引を設計してください。 それに加えて、オプティマイザーは複数のデータ・パーティションを対象とした照会に関する決定を下すにあたり、グローバルなクラスタリング度を表す値を使用するため、クラスタリングの再編成を実行しつつも、キーが適切でない場合はオプティマイザーがクラスタリング索引を選択しないようにすることができます。

    注:
    • 先読みプリフェッチが有効になっている場合、公式 F4 は、REORG コマンドを実行するかどうかの良い指標とはならない可能性があります。 REORG コマンドを実行するかどうかは、照会パフォーマンスに応じて決定するのがより適切です。
    • 索引キー列のランダム順序付けの場合、CLUSTERRATIO は低くなります。 索引キー列のランダム順序付けでは索引キーを順不同に並べ、データ順に挿入するため、この数値は低くなります。 ランダム順序付けをクラスタリング索引として使用することはできません。 これらの理由により、REORGCHK の公式 F4 の結果には常に、索引をランダム順にする場合、再編成は必要でないことが示されます。 REORGCHK_IX_STATS ストアード・プロシージャーを使用する場合も同様です。
  • 公式 F5:
    • 単一データベース・パーティションの場合:
      100*(KEYS*(LEAF_RECSIZE+LEAF_RECSIZE_OVERHEAD)+(INDCARD-KEYS)*DUPKEYSIZE)
      / ((LEAF-NUM_EMPTY_LEAFS-1)* (INDEXPAGESIZE-LEAF_PAGE_OVERHEAD)) 
      > MIN(50,(100-PCTFREE))

      索引のリーフ・レベルで使用されている割り振りスペースのパーセンテージは、PCTFREE が CREATE INDEX ステートメントによって定義されている場合は、最小の 50 パーセントと 100 パーセントの PCTFREE パーセントより大きくなければなりません。 使用されるスペースがこの値より少ない場合、REORG を実行することによって索引を小さくすることができます。 索引のリーフ・ページを 1 ページより少なくすることはできないので、この公式は、LEAF>1 の場合にのみ検査されます。

    • 複数パーティション・データベース環境の場合:
      100*(KEYS*(LEAF_RECSIZE+LEAF_RECSIZE_OVERHEAD)+(INDCARD-KEYS)*DUPKEYSIZE)
      / ((LEAF-NUM_EMPTY_LEAFS-NPARTITIONS)*(INDEXPAGESIZE-LEAF_PAGE_OVERHEAD)) 
      > MIN(50,(100-PCTFREE))
      
  • 公式 F6:
    (( 100-PCTFREE ) * ((FLOOR((100 - LEVEL2PCTFREE) / 100 * 
    (INDEXPAGESIZE-NLEAF_PAGE_OVERHEAD)/(NLEAF_RECSIZE+NLEAF_RECSIZE_OVERHEAD)))*
    (FLOOR((100-MIN(10, LEVEL2PCTFREE))/100*(INDEXPAGESIZE-NLEAF_PAGE_OVERHEAD)/
    (NLEAF_RECSIZE+NLEAF_RECSIZE_OVERHEAD)) ** (NLEVELS-3)) * 
    (INDEXPAGESIZE-LEAF_PAGE_OVERHEAD))/(KEYS*(LEAF_RECSIZE+LEAF_RECSIZE_OVERHEAD)+
    (INDCARD-KEYS) * DUPKEYSIZE)) < 100

    索引の再作成がツリーのレベル数を減少させるかどうかを判別するために、 この公式は現行のツリーよりも 1 つ低いレベルの索引ツリー内にあるスペースの量と 必要なスペースの量との比率を検査します。 1 つ低いレベルのツリーを作成しても PCTFREE が使用できるなら、再編成をお勧めします。 索引項目の実際の数は、NLEVELS-1 索引ツリーが処理できる項目数の (100-PCTFREE) パーセントを超えてはなりません ( NLEVELS>2の場合にのみ検査されます)。 NLEVELS = 2 の場合に索引の再編成が必要かどうかを判断するには、他の REORGCHK 公式に頼る必要があります。

    簡易な形式の場合、公式 F6 は以下の形式に書き直すことができます。
    Amount of space needed for an index if it was one level smaller
    --------------------------------------------------------------- < 1
        Amount of space needed for all the entries in the index

    左上の部分が1より大きい場合、既存のインデックスのすべてのインデックスエントリが、既存のインデックスより1レベル小さいインデックスに収まる可能性があることを意味します。 この場合、索引の REORG をお勧めします。

    NLEVELS-1 索引に必要なスペース量は、次のように計算されます。
    (The max number of leaf pages that a NLEVELS-1 index can have) * 
    (Amount of space available to store index entries per leaf page)

    ここで、

    The max number of leaf pages that a NLEVELS-1 index can have =
    (No. of entries a level 2 index page can have) *
    (No. of entries per page on levels greater than 2) **
    (No. of levels in the intended index - 2) =
    
                  (100 - LEVEL2PCTFREE)         
    { FLOOR( [----------------------------]  *  
                          100                   
                
                (PageSize - Overhead)                       
    [-------------------------------------------] ) *
       (Avg. size of each nonleaf index entry)   
    
              (100 - MIN(10, LEVEL2PCTFREE))       
    FLOOR([------------------------------------] * 
                          100                      
     
              (PageSize - Overhead)                          
    [----------------------------------------------------])**                       
           (Avg. size of each nonleaf index entry)
    
    (NLEVELS-3) }
    
    
    (100 - LEVEL2PCTFREE) is the percentage of used space on level 2 of the index.
    
    Level 2 is the level immediately above the leaf level.
    
    (100 - MIN(10, LEVEL2PCTFREE)) is the percentage of used space on all levels
    above the second level.                                     
    
    NLEVELS is the number of index levels in the existing index.
    
    The amount of space available to store index entries per leaf page = 
    ((100-PCTFREE)/100 * (INDEXPAGESIZE - LEAF_PAGE_OVERHEAD)) =
    ( Used space per page * (PageSize - Overhead) )
    
    The amount of space needed for all index entries:
    KEYS * (LEAF_RECSIZE + LEAF_RECSIZE_OVERHEAD) +
    (INDCARD - KEYS) * DUPKEYSIZE

(KEYS * (LEAF_RECSIZE + LEAF_RECSIZE_OVERHEAD)) は、索引内の各キー値の最初の出現箇所に使用されるスペースを表し、((INDCARD - KEYS) * DUPKEYSIZE) は、キー値のその後の (重複) 出現箇所に使用されるスペースを表します。

  • 公式 F7:
    100 * (NUMRIDS_DELETED / (NUMRIDS_DELETED + INDCARD)) < 20

    疑似空白ではないページ上の疑似削除された RID の数は 20% 未満でなければなりません。

  • 公式 F8:
    100 * (NUM_EMPTY_LEAFS/LEAF) < 20

    疑似空白リーフ・ページの数は、リーフ・ページの合計数の 20% 未満でなければなりません。

多数の表で統計を実行すると、表が大きい場合には特に時間がかかります。

索引圧縮に関する使用上の注意

公式 F5 は、キーが必要とするスペース量と、割り振られているスペース量の比率を判別します。 公式 F6 は、索引の再作成がツリーのレベルを減少させるかどうかを判別します。 以下の公式は現行のツリーよりも 1 つ低いレベルの索引ツリー内にあるスペースの量と 必要なスペースの量との比率を検査します。 この公式は、すべての索引項目に必要なスペース量に基づいています。 どちらの公式も、すべての索引項目に必要なスペース量を使用します。

圧縮解除索引内にあるすべての索引項目に必要なスペース量は、以下のようになります。
KEYS * (LEAF_RECSIZE + LEAF_RECSIZE_OVERHEAD) +
(INDCARD - KEYS) * DUPKEYSIZE
ここで、LEAF_RECSIZE は索引キーの平均サイズです。DUPKEYSIZEはRIDのサイズです。
圧縮索引では、LEAF_RECSIZEは接頭部圧縮の影響を受けます。 DUPKEYSIZEはインデックスの重複キーのサイズ測定に対して、信頼できる方法ではありません。 圧縮索引で必要なスペース量は、圧縮解除されているすべての索引項目で必要とされるスペース量に索引圧縮比率を乗算して求めます。
(KEYS * (LEAF_RECSIZE + LEAF_RECSIZE_OVERHEAD) +
(INDCARD - KEYS) * DUPKEYSIZE) * COMPRESSION_RATIO
ここで、COMPRESSION_RATIOは索引内の索引圧縮率の見積もりです。 COMPRESSION_RATIO は、以下のようにして計算されます。
(100 - PCT_PAGES_SAVED) / 100
ここで、PCT_PAGES_SAVEDは、索引圧縮に節約されるリーフ・ページの推定パーセンテージです。 この値は、カタログから取得されます。 統計が収集されない場合、カタログ内のPCT_PAGES_SAVEDは -1、COMPRESSION_RATIOは1です。

REORGCHK コマンドと REORGCHK_IX_STATS プロシージャーはどちらも PCT_PAGES_SAVED 値を示します。

パーティション表に関する使用上の注意

データ・パーティション表に関して、REORGCHK は表および表のデータ・パーティションの統計と再編成推奨値を戻します。

表統計および再編成の推奨事項については、 REORGCHK に、 SCHEMA.NAME 、表レベルの統計、および再編成の推奨。 表情報に続いて、各データ・パーティション情報に関する情報がリストされます。 各パーティションに対して、表の SCHEMA.NAME、パーティション名、パーティションの表統計、およびパーティションの再編成推奨値などの情報があります。

索引統計および再編成の推奨事項の場合、 REORGCHK は SCHEMA.NAME の後に、表の各非パーティション索引の完全修飾索引名と索引統計、および索引再編成の推奨事項が続きます。 表にパーティション索引が含まれる場合、REORGCHK は、非パーティション索引の後にパーティション索引の情報を戻します。 REORGCHK は、完全修飾された索引名、パーティション名、パーティションの索引統計、およびパーティションに対する索引の再編成推奨値など表のデータ・パーティションごとの情報を戻します。

データ・パーティション表のデータ可用性を高めるために、特定のデータ・パーティションの再編成を行うことができます (推奨された場合)。 ON DATA PARTITION 節を指定した REORG TABLE は、表のパーティションの再編成をサポートします。

パーティション索引の場合、推奨されている場合は、 ON DATA PARTITION 節を指定した REORG INDEXES ALL を使用して、特定のデータ・パーティションのすべての索引の索引再編成を実行できます。

REORG INDEX コマンドを使用して、データ・パーティション表の非パーティション索引を再編成することができます。

データ・パーティション表の再編成の推奨事項については、 REORG 列を参照してください。

以下に、パーティション表 MYDPARTT1 に対する表統計の出力例を示します。 この表には、デフォルト・パーティション名 PART0、PART1、および PART2 という 3 つのデータ・パーティションがあります。
Table statistics:

SCHEMA.NAME             CARD  OV  NP  FP ACTBLK  SIZE  F1  F2  F3 REORG
-----------------------------------------------------------------------
Table: USER1.MYDPARTT1
                           -   -   -   -      -     -   -   -   - ---
Table: USER1.MYDPARTT1
Data Partition:  PART0
                           -   -   -   -      -     -   -   -   - ---
Table: USER1.MYDPARTT1
Data Partition:  PART1
                           -   -   -   -      -     -   -   -   - ---
Table: USER1.MYDPARTT1
Data Partition:  PART2
                           -   -   -   -      -     -   -   -   - ---
-----------------------------------------------------------------------
以下に、パーティション表 MYDPARTT1 の索引統計の出力例を示します。 この表には、3 つのデータ・パーティション、1 つの非パーティション索引 MYNONPARTIDX1、および 1 つのパーティション索引 MYDPARTIDX1 があります。
Index statistics:

SCHEMA.NAME                INDCARD LEAF ELEAF LVLS NDEL KEYS ... F4 F5 F6 F7 F8 REORG  
------------------------------------------------------------ ... --------------------
Table: USER1.MYDPARTT1
Index: USER1.MYNONPARTIDX1
                                 -    -     -    -    -    - ...  -  -  -  -  - ----- 
Index: USER1.MYDPARTIDX1
Data Partition:   PART0
                                 -    -     -    -    -    - ...  -  -  -  -  - ----- 
Index: USER1.MYDPARTIDX1
Data Partition:   PART1
                                 -    -     -    -    -    - ...  -  -  -  -  - ----- 
Index: USER1.MYDPARTIDX1
Data Partition:   PART2
                                 -    -     -    -    -    - ...  -  -  -  -  - ----- 
------------------------------------------------------------ ... --------------------