17.00 - 17.05 - 古い統計情報 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLリクエストおよびトランザクション処理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

古い統計とは、最初に統計を収集した列のセットの内容を正確に表現しなくなってしまった間隔ヒストグラム統計のことです。

間隔ヒストグラム統計は、結合カーディナリティ、値ごとの行数、スキュー調整、および正確な問合わせ最適化に必要なその他の情報の見積もりに使用する、最適化ルーチン用の列デモグラフィック情報の最初の情報源です。

最適化ルーチンは、複数列統計を使用した列相関の導出、各バイナリ結合が実行された後の固有値の個数の調整や伝搬などのような、統計の使用に関する動的な方法も採用しています。この方法は、最適化ルーチン全体にわたって首尾一貫した方法で開発および一般化されています。

コストとカーディナリティの見積もりの公式と列相関を導出するための戦略は、最適な計画を生成するために利用できる統計の正確性により異なります。ソフトウェアは、その統計の入力が正確でない場合、合理的な計画を生成しない場合があります。統計が正確でない最も一般的な原因は、統計が古いことです。

最適化ルーチンが必要な統計が古いと判断したときにその統計を検出しデータ値を外挿するプロセス(古い統計を置き換えるための外挿の使用を参照)は、統計を収集または再収集する頻度を減らすことを目的として設計されています。

古い統計の検出

テーブルの見積もりカーディナリティは、Teradata Databaseが古いヒストグラムを検出し、外挿をアクティブ化するために必要になる重要な情報です。

あらゆるヒストグラムには、統計収集時のテーブル内の行数に基づくカーディナリティ値が含まれています。データベースは、ヒストグラムの行数と新たに計算されたテーブル カーディナリティの見積もりとを比較して、ヒストグラムが古いかどうかを判断します。最適化ルーチンがヒストグラムが古いと判断すると、選択的な見積もりを実行するときに外挿テクニックを適用します。

派生統計を使用した古い統計の補正

以下の方式のどちらかまたは両方を使用して、データベースによる統計の再収集の実行をCOLLECT STATISTICSリクエストで指定された制限を超えた場合に限定することができます。実行方法の詳細について、統計を収集または再収集するための最適なタイミング統計の再収集の最適化を参照してください。

詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「COLLECT STATISTICS (最適化ルーチン形式)」を参照してください。
  • 再収集しきい値の設定

    THRESHOLDオプションを使用すれば、データベースに対して、最後の統計収集以降のデータ変更または統計の存在期間が最初の統計収集時に指定されたしきい値を下回った場合は統計の再収集をスキップするように指示できます。

    詳細については、しきい値オプションを使用した統計再収集の最適化を参照してください。

  • 全統計ではなくサンプル統計の収集
    サンプリング デフォルトを確認するための次の方法が存在します。
    • データベースで使用されるサンプリング パーセンテージを指定できます。
    • データベースに対して、選択された一連の基準に基づいて使用するサンプリング パーセンテージを決定するように指示できます。

      データベースはサンプリング パーセンテージを決定するときに、統計収集を100%サンプリングから再収集を特定の列またはインデックス セットに最適化するために選択したサンプリング レートに格下げする方法を使用します。

      詳細については、サンプリングを使用した統計再収集の最適化を参照してください。

データベースがサンプリング デフォルトを判断するために使用するサンプリング パーセンテージを指定できます。

カーディナリティ見積もりサブシステムが古い統計の問題を扱う際の、4通りの基本的な方法について説明します。
  1. 総カーディナリティの調整
    最適化ルーチンは、テーブル レベルのSUMMARY統計を使用してテーブルの拡大を判断します。これを判断するために、現在の動的AMPサンプルから見積もられるカーディナリティと、残余テーブル レベル統計から見積もられるカーディナリティを比較します。その後で、最適化ルーチンは、見積もられた拡大分をSUMMARY統計から見積もったカーディナリティに加え、テーブルの現在のカーディナリティを見積もります。
    • プライマリ インデックスにひずみがない場合、およびサンプルと間隔ヒストグラム行数の偏差が、デフォルトのパーセンテージより大きい場合は、サンプル行数がテーブルのカーディナリティになります。ひずみは、間隔ヒストグラムに格納されている高い頻度度数値から特定できます。
    • 利用できるSUMMARY統計がない場合は、現在の最適化ルーチン ソフトウェアの動作と同様に、サンプリングされた行数がテーブルのカーディナリティになります。
  2. 固有値の個数の調整

    インデックスでは、カーディナリティは、インデックス付きの列の固有値の総数として見積もられます。 この場合、固有値の数は、総カーディナリティの調整と同じ方法で調整されます。

    調整したテーブルの行数が、インデックス付きでない列のヒストグラム行数と比べて、定義済みのパーセンテージよりも大きく異なる場合、結合カーディナリティおよびコスト計算関連公式に入力される基本値である定数値の個数は、次のシナリオで増減されます:
    • ヒストグラムがDATE列にある。
    • ヒストグラムが、DATE列構成要素がある複数列にある。
    • ヒストグラムが固有インデックス上にある。
    • ヒストグラムがゆるやかな固有列にある。 ゆるやかな固有性とは、間隔ヒストグラム統計が、固有値の個数がテーブルの総カーディナリティに近いことを示す場合をいいます。
    スケール設定操作では、値ごとに一定の行数が想定されます。 例えば、テーブルのカーディナリティは、動的AMPサンプルから100行であると見積もられます。 列x1について、行数が50で、固有値の数が25であることをヒストグラムが示している場合、つまり値ごとの行数が2であることを示している場合、固有値の数は""まで増加します。

    値のスケール設定は、増減に関係なく、すべての列に対して無条件には実行できません。

    例えば、product_id、business_unit_idのような列に、新しい調整値を追加することはできません。これは、新しい調整値を追加する意味がないためです。それらに任意の値を設定したり、それらをカーディナリティにすることもできません。したがって、特にこの場合は、それらの値に数学的操作を実行することは意味がありません。

  3. 統計収集のタイムスタンプの考慮

    親の基本テーブルが単一テーブルの非スパース結合またはハッシュ インデックスから統計を継承する間、またはその逆の継承の間、統計が継承元と継承先の両方の間隔ヒストグラムの列で利用可能な場合、システムはタイムスタンプを比較することによって決定される2つのうちの新しい方の統計を使用します。

  4. 信頼度レベルの調整

    利用可能なヒストグラムがサンプリングされた統計から作成された場合、システムは常にその信頼度レベルを下げます。

ひずみのある列とインデックスに対して、統計を常に新しく保つ必要があります。

単一テーブル列見積もりの古い統計の処理は、さまざまな外挿法を使用して実行されます。