統計の再収集の最適化について
トピック派生統計を使用した古い統計の補正で簡単に説明したように、COLLECT STATISTICS SQL文は、必要なとき以外はデータベースによる統計の再収集を制限する2つの方法をサポートしています(これらの方法の詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照)。
これを実現するには、全統計ではなく、サンプル統計の収集を指定します。
- データベースで使用されるサンプリング パーセンテージを指定できます。
- データベースに対して、選択された一連の基準に基づいて使用するサンプリング パーセンテージを決定するように指示できます。
データベースはサンプリング パーセンテージを決定するときに、統計収集を100%サンプリングから再収集を特定の列またはインデックス セットに最適化するために選択したサンプリング レートに格下げする方法を使用します。
- 再収集しきい値の設定
- 全統計ではなくサンプル統計を収集するための指定 サンプリング デフォルトを確認するための2つの方法が存在します。
- データベースで使用されるサンプリング パーセンテージを指定できます。
- データベースに対して、選択された一連の基準に基づいて使用するサンプリング パーセンテージを決定するように指示できます。
データベースはサンプリング パーセンテージを決定するときに、統計収集を100%サンプリングから再収集を特定の列またはインデックス セットに最適化するために選択したサンプリング レートに格下げする方法を使用します。
しきい値オプションを使用した統計再収集の最適化
COLLECT STATISTICS (最適化ルーチン形式)文は、統計再収集用のしきい値を指定するオプションを複数サポートしています。これらのオプションを使用すれば、データベースで列またはインデックス セットに関する統計を再収集するように発行されたリクエストを無視するかどうかを判断するためのさまざまな基準を指定できます。
- データの変更の比率または変更ベースの再収集
使用される基準は、統計が最後に収集されてからデータが変更された比率に基づきます。指定された列またはインデックス セットに関する統計の最後の再収集以降の変更の比率がしきい値として使用されます。
- 存在期間または時間ベースの再収集
使用される基準は、統計の存在期間に基づきます。指定された列またはインデックス セットに関する統計の最後の再収集以降に経過した日数がしきい値として使用されます。
COLLECT STATISTICSリクエストを発行するときに、最後の統計収集以降のデータ変更または統計の存在期間がそれらの統計の再収集に対して指定されたしきい値を下回った場合に統計を再収集しないしきい値を指定します。
- データベースに対して適切なしきい値の決定を指示する。
システム決定しきい値オプションが指定された場合は、最適化ルーチンが、自動的に、過去に収集した統計、列、またはインデックスの履歴データ、UDIカウント、およびその他の要素に基づいて、使用する適切なしきい値を決定します。
- 独自のユーザー決定しきい値を指定する。
しきい値を指定する場合は、変更パーセンテージと日数ベースの存在期間基準のどちらかまたはその両方を指定します。
統計の再収集用のしきい値を指定することによって、統計の更新タイミングを決定する責任と義務がなくなります。しきい値オプションを指定したら、定期的にCOLLECT STATISTICSリクエストを発行することによって、最適化ルーチンが、しきい値が満たされていない指定された統計の再収集をスキップするのか、しきい値を上回っている列またはインデックスに関する統計を再収集するのか、あるいはその両方を行うのかをインテリジェントに決定できます。
例えば、ユーザーとデータベースのどちらかが10%のデータ変更をしきい値として設定し、ユーザーが列またはインデックス セットに関する統計を再収集するリクエストを発行した場合、最適化ルーチンは、最後の統計収集以降のデータ変更が10%未満であるかぎり、統計を再収集しません。
指定されたしきい値に関係なく、一連の統計を再収集することにした場合は、COLLECT STATISTICSリクエストを発行して、上書きするオプション セットと一緒にキーワード句のFOR CURRENTを指定できます。この場合、データベースは、現行の再収集でだけ保存されたしきい値を無視し、指定された列またはインデックス セットに関する統計の再収集を次回行なうときには保存されたしきい値に戻します。
初めて列またはインデックス セットに関する統計を収集するときに1つ以上のしきい値が指定された場合、最適化ルーチンは統計を収集して、指定されたしきい値オプションを保存します。列またはインデックス セットに関する統計を再収集するとき、データベースは保存したしきい値オプションを使用して、最新の統計再収集リクエストを無視すべきか、受け入れるべきかを判断します。
統計の再収集に関するしきい値が新しく指定された場合は、その新しいしきい値によって既存のしきい値が上書きされ、データベースは指定されたしきい値を最新のリクエストに適用し、そのしきい値を今後の指定された統計の再収集用に保存します。
- 変更ベースの方法
- 時間ベースの方法
変更ベースのしきい値の場合は、最適化ルーチンが、システム維持UDIカウント、ランダムAMPサンプル、および入手可能な列またはインデックス履歴を参照して、最後の統計収集以降のデータ変更の範囲を決定します。
COLLECT STATISTICSリクエストに対してSYSTEM THRESHOLDとSYSTEM THRESHOLD PERCENTのどちらかのオプションが指定された場合、最適化ルーチンは列とインデックスの履歴と外挿法を考慮して、適切な変更しきい値を決定します。
最適化ルーチンで使用可能なさまざまな外挿については、古い統計を置き換えるための外挿の使用を参照してください。
最適化ルーチンは、小規模なテーブルNUSI統計などの情報も評価して、要求された統計を再収集するかどうかを判断します。このような小規模なデータベース オブジェクトの場合は、最適化ルーチンが全統計を収集する傾向があります。これは、全統計を収集することによって、わずかなコストで最新の統計が入手できるためです。
時間ベースのしきい値を使用した場合、最適化ルーチンは最新の統計の存在期間を評価して、それらを更新するかどうかを判断します。
もちろん、さまざまなサンプリング オプションに加えて、変更ベースのしきい値と時間ベースのしきい値のさまざまな組み合わせを指定することによっても、列またはインデックス セットに関する統計の再収集コストを削減できます。
しきい値アプローチを使用すれば、指定された再収集しきい値が満たされていなければ、データベースが指定された統計の再収集を省略するため、そのタイミングを気にすることなく、定期的に、統計の再収集リクエストを発行できます。不要な統計を再収集しないことによって、データベースはコストの高いCPUやI/Oリソースの浪費を防ぐことができます。また、前述したように、システム決定しきい値を使用することによって、最適化ルーチンは、自動的に、統計の再収集が必要かどうか、または、外挿が、指定された列またはインデックス セットに関する統計値を見積もる適切な代替手段かどうかを判断できます。
データ ディクショナリ テーブルの列DBC.StatsTbl.LastCollectTimeStampに問合わせることによって、統計を再収集するCOLLECT STATISTICSリクエストが受け入れられたか、スキップされたかを確認できます。DBC.StatsTblとテーブルのアクセスに使用可能なシステム ビューの詳細については、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。
サンプリングを使用した統計再収集の最適化
システム決定サンプリング パーセンテージとユーザー指定サンプリング パーセンテージのどちらかを使用してCOLLECT STATISTICSリクエストを発行することによって、サンプル統計を収集できます。
システム決定サンプリング パーセンテージが指定された場合、データベースは格下げアプローチを使用して、全統計の収集からサンプリングに切り替える適切なタイミングを判断します。このアプローチを使用して、最適化ルーチンは、品質を犠牲にすることなく、サンプリングを実行するタイミングと、全統計収集を最大とするサンプリングの程度を判断します。ダウングレード アプローチの仕組みは以下のとおりです。
- サンプリングを指定したCOLLECT STATISTICSリクエストが初めて発行されると、最適化ルーチンはまず全統計を収集します。全統計の収集を通して、最適化ルーチンには、より低いパーセンテージに格下げするタイミングを判断するのに十分な情報がもたらされます。
これは、少量のサンプルを収集してから、より多くのサンプルの方が適切かどうかを判断するのとは違います。
- 以降の同じ統計の再収集リクエストで、最適化ルーチンは、適切な統計履歴を取得するだけの十分な統計が収集されるまで、全統計の収集を継続します。
- 適切な統計履歴が収集された時点で、最適化ルーチンは列またはインデックスの特性(ひずんでいるか、ローリングしているか、静的かなど)を確認できます。
その後で、最適化ルーチンは、DBC.StatsTbl.UsageType列に保存された詳細バケットまたはただのサマリー データからの列使用とユーザー指定間隔を考慮して、全統計の収集からサンプル統計の収集に格下げする適切なタイミングを判断します。
Teradata Databaseは、詳細な間隔ではなく、サマリー データが使用されるヒストグラムに関して、全統計の収集からサンプル統計の収集への格下げにより積極的です。
- その後で、最適化ルーチンが、統計の再収集用のサンプル パーセンテージ(2~100%)を決定し、列の履歴と特性に基づいて調整するための適切な式を自動的に決定します。
- 再収集された統計と履歴の品質が比較されます。パーセンテージは、最適化ルーチンがパーセンテージを下げた方が品質が高くなると確実に判断できる場合にのみ下げられます。
このアプローチにより、どの列のサンプル統計を収集するかの判断に関する責任と義務がなくなります。さらに、最初に全統計を収集することによって、以降の再収集におけるサンプリング量をインテリジェントに決定するために必要な情報が最適化ルーチンにもたらされます。
例えば、小規模なテーブル、ひずみのある列、パーティション式列セットのメンバーである列、および詳細バケットが必要な列の場合は、最適化ルーチンが100%未満でサンプル統計に切り替えることはありません。
また、最適化ルーチンは、全統計内で高頻度で出現する列を検出し、以降の再収集で、100%よりはるかに低いパーセンテージ(例えばたった2%)でのサンプル統計に自動的に切り替え、頻出列に適切なスケーリング式を適用して外挿された全統計を取得することにより、全統計よりもはるかに迅速に、質の高い統計を入手できます。
全統計でローリング列、固有の列、およびほぼ固有の列が検出された場合、最適化ルーチンは、はるかに低いパーセンテージでサンプル統計を収集し、線形スケーリング式を適用して外挿された全統計を生成できます。
ごく少量のサンプル統計収集(数量はデータのデモグラフィック パターンとUDIカウントに基づく)後に、最適化ルーチンは、100%の統計収集を使用して統計を再収集することによって、使用されたサンプル パーセンテージと外挿法を検証して必要に応じて調整できます。
単一テーブル ビューはサンプル統計に対応していません。
ディクショナリ テーブルの列DBC.StatsTbl.SampleSizePctに問合わせることによって、データベースで統計の収集に使用されたサンプル パーセンテージを特定できます。ユーザー指定サンプル パーセンテージの場合は、ヒストグラムを構築するために使用される実際のサンプル サイズが、指定されたサンプリング パーセンテージと比較して、等しい、少し高い、または少し低いことがあります。