カタログ統計

照会コンパイラーが照会プランを最適化する際には、 データベースの表、索引、および統計ビューのサイズに関する統計情報が、 コンパイラーの判断にかなり影響します。 この情報は、システム・カタログ表に保管されます。

さらに、表、索引、および統計ビューの特定の列が行の選択や表の結合に使用される場合、 オプティマイザーはそれらの列でのデータ分布情報も使用します。 この情報は、照会ごとの代替アクセス・プランのコストを見積もるために使用されます。

索引のクラスター比率、索引内のリーフ・ページ数、元のページからオーバーフローする表の行数、 および表内の入力されているページ数と空のページ数についての統計情報も収集できます。 この情報は、表または索引を再編成する時期を決定するために使用できます。

パーティション・データベース環境では、表の統計は、ユーティリティーが実行されるデータベース・パーティション上にある表の部分についてのみ収集されるか、表を含むデータベース・パーティション・グループ内の最初のデータベース・パーティションについてのみ収集されます。 統計ビューについての情報は、全データベース・パーティションについて収集されます。

runstats ユーティリティーによって更新される統計

カタログ統計は runstats ユーティリティーによって収集されます。 このユーティリティーは、RUNSTATS コマンドを発行するか、ADMIN_CMD プロシージャーを呼び出すか、または db2Runstats API を呼び出すことによって開始できます。 更新は、手動と自動のいずれでも開始できます。

IBM Data Studio バージョン 3.1 以降では、タスク アシスタントを使用してカタログ統計を収集できます。。 タスク・アシスタントは、オプションの設定、タスク実行のために自動生成されたコマンドの確認、およびそれらのコマンドの実行のプロセスをガイドします。 詳しくは、 タスク・アシストを使用したデータベースの管理を参照してください。

宣言済み一時表に関する統計はシステム・カタログに保管されるのではなく、宣言済み一時表のカタログ情報を表すメモリー構造に保管されます。 宣言済み一時表に対して runstats を実行することは可能です (状況によってはこれが役立つ場合があります)。

表および索引に関して、runstats ユーティリティーは以下の情報を収集します。
  • 行を含んでいるページの数
  • 使用中のページの数
  • 表内の行の数 (カーディナリティー)
  • オーバーフローしている行の数
  • マルチディメンション・クラスタリング (MDC) 表、および挿入時クラスタリング (ITC) 表の場合は、データを含んでいるブロックの数
  • パーティション表の場合、単一のデータ・パーティション内でのデータ・クラスタリングの程度
  • データ分散統計。オプティマイザーはこれを使用して、データが均等に分布していない表および統計ビュー、および列に膨大な数の重複値がある表および統計ビューに関して効果的なアクセス・プランを見積もります。
  • 詳細な索引統計。オプティマイザーはこれを使用して、索引を介して表のデータにアクセスするときの効率性を判別します。
  • LIKE 述部のサブエレメント統計、特にストリング内のパターンを検索するサブエレメント統計 (例えば、LIKE %disk%) は、オプティマイザーによっても使用されます。
表のそれぞれのデータ・パーティションごとに、runstats ユーティリティーは以下の統計を収集します。 これらの統計は、パーティションが再編成される必要があるかどうかを判別するためにのみ使用されます。
  • 行を含んでいるページの数
  • 使用中のページの数
  • 表内の行の数 (カーディナリティー)
  • オーバーフローしている行の数
  • MDC 表および ITC 表の場合、データを含んでいるブロックの数
以下の場合、分散統計は収集されません。
  • データベース構成パラメーター num_freqvalues および num_quantiles が 0 に設定されている場合
  • データの分散が分かっている場合。例えば、各データ値が固有である場合など
  • 列に LONG、LOB、または構造化データ型が含まれる場合
  • 副表の行タイプの場合 (表レベルの統計 NPAGES、FPAGES、および OVERFLOW は収集されません)
  • 変位値分散が要求されたが、列の中に NULL 以外の値が 1 つしかない場合
  • 拡張索引または宣言済み一時表の場合
表または統計ビューの各列、および索引キーの最初の列に関して、runstats ユーティリティーは以下の情報を収集します。
  • 列のカーディナリティー
  • 列の平均長 (列がデータベース・メモリーまたは一時表に格納される場合に必要となる平均スペース (バイト単位))
  • 列内で 2 番目に高い値
  • 列内で 2 番目に低い値
  • 列内の NULL 値の数
ラージ・オブジェクト (LOB) または LONG データ・タイプが含まれる列では、runstats ユーティリティーは、列の平均の長さと列に含まれる NULL 値の数のみを収集します。 列の平均長は、LOB データがデータ・ページ上のインラインに置かれている場合を除き、データ記述子の長さを表します。 ディスク上に列を格納するために必要な平均スペース量は、この統計値とは異なる場合があります。
それぞれの XML 列に関して、runstats ユーティリティーは以下の情報を収集します。
  • NULL の XML 文書の数
  • 非 NULL の XML 文書の数
  • 異なるパスの数
  • 異なるパスごとのノード・カウントの合計
  • 異なるパスごとの文書数の合計
  • 最大のノード・カウントを持つ (パス、ノード・カウント) の k ペア
  • 最大の文書数を持つ (パス、文書数) の k ペア
  • 最大のノード・カウントを持つ (パス、値、ノード・カウント) の k トリプル
  • 最大の文書数を持つ (パス、値、文書数) の k トリプル
  • テキストまたは属性値へ導く異なるパスごとに、以下のとおりです。
    • このパスが取る可能性のある別個の値の数
    • 最大値
    • 最小値
    • テキストまたは属性ノードの数
    • テキストまたは属性ノードを含む文書の数
XML 列の各行は、XML 文書を保管します。 パスまたはパスと値のペアのノード・カウントは、そのパスまたはパスと値のペアによって到達可能なノードの数のことです。 パスまたはパスと値のペアの文書数は、そのパスまたはパスと値のペアを含む文書の数のことです。
について Db2®V9.7 Fix Pack 1以降のリリースでは、XML列の分布統計の収集に以下が適用されます:
  • 分散統計は、XML 列で指定された XML データの索引ごとに収集されます。
  • runstats ユーティリティーが XML データの索引で分散統計を収集するには、分散統計と表統計の両方を収集しなければなりません。 XML 分散統計は表統計と一緒に格納されるため、分散統計を収集するには表統計を収集する必要があります。

    索引統計だけを収集したり、索引作成時に索引統計を収集したりしても、XML データの索引の分散統計は収集されません。

    デフォルトでは、runstats ユーティリティーによって、XML データの索引ごとに分散統計の最大で 250 の変位値が収集されます。 列の変位値の最大数は、runstats ユーティリティーの実行時に指定できます。

  • 分散統計は、タイプ VARCHAR、DOUBLE、TIMESTAMP、および DATE の XML データの索引に対して収集されます。 タイプ VARCHAR HASHED の XML データの索引に対しては、XML 分散統計は収集されません。
  • 自動表の runstats 操作の実行時に、XML 分散統計が収集されます。
  • STATISTICS オプションを使用してデータをロードする場合には、XML 分散統計は作成されません。
  • パーティション表で定義された XML データのパーティション索引の場合、XML 分散統計は収集されません。
注: ほとんどの XML 列統計は、システム・カタログ表には保管されず、代わりに列の表のパック記述子に保管されます。 パック記述子の XML 統計を表示するには、 db2catを使用します。
列グループに関して、runstats ユーティリティーは以下の情報を収集します。
  • 列グループのタイム・スタンプに基づいた名前
  • 列グループのカーディナリティー
索引に関して、runstats ユーティリティーは以下の情報を収集します。
  • 索引項目の数 (索引のカーディナリティー)
  • リーフ・ページの数
  • 索引レベルの数
  • 索引への表データのクラスタリングの程度
  • データ・パーティションに関しての索引キーのクラスタリングの程度
  • 索引によって占有されるページの範囲内のページ数に対する、索引キーの順序のディスク上にあるリーフ・ページの数の比率
  • 索引の最初の列の固有値の数
  • 索引の最初、2 番目、3 番目、4 番目の列の固有値の数
  • 索引のすべての列の固有値の数
  • 索引キーの順序で、間をあまり空けずにディスクに位置づけられたリーフ・ページの数
  • 平均のリーフ・キーのサイズ (組み込み列なし)
  • 平均のリーフ・キーのサイズ (組み込み列あり)
  • すべてのレコード ID (RID) が削除対象としてマークされているページの数
  • 一部の RID だけが削除対象としてマークされているページで、削除対象としてマークされている RID の数
詳細な索引統計を要求した場合、索引に対する表データのクラスタリングの程度に関する追加情報、 およびさまざまなバッファー・サイズに関するページ・フェッチの見積もりが収集されます。

パーティション索引の場合、これらの統計は単一の索引パーティションを表します。ただし、索引の最初の列の固有値、索引の最初の 2 つ、3 つ、および 4 つの列の固有値、および索引のすべての列の固有値は例外です。 索引パーティションごとの統計も、索引パーティションが再編成される必要があるかどうかを判別する目的で収集されます。

統計収集を行うと、統計が収集された表を参照するキャッシュ済み動的ステートメントは無効になります。 このようにすることで、キャッシュに入れられた動的ステートメントを最新の統計で再最適化できます。