CBO の統計収集
このトピックでは、CelerData CBO の基本概念と CBO のための統計収集方法について説明します。CelerData は、正確なデータ分布統計を収集するためにヒストグラムを導入しています。
CBO とは
コストベースオプティマイザ (CBO) は、クエリ最適化において重要です。SQL クエリが CelerData に到着すると、論理実行計画に解析されます。CBO は論理計画を複数の物理実行計画に書き換え、変換します。CBO はその後、計画内の各 Operator の実行コスト(CPU、メモリ、ネットワーク、I/O など)を推定し、最もコストの低いクエリパスを最終的な物理計画として選択します。
CelerData CBO はデフォルトで有効になっています。Cascades フレームワークに基づいて開発された CelerData CBO は、さまざまな統計情報に基づいてコストを推定します。数万の実行計画の中から最もコストの低い実行計画を選択することができ、複雑なクエリの効率とパフォーマンスを大幅に向上させます。
統計は CBO にとって重要です。これらはコスト推定が正確で有用であるかどうかを決定します。以下のセクションでは、統計情報の種類、収集ポリシー、および統計の収集方法と 統計情報の表示方法について詳しく説明します。
統計情報の種類
CelerData は、コスト推定の入力としてさまざまな統計を収集します。
基本統計
デフォルトで、CelerData はテーブルとカラムの以下の基本統計を定期的に収集します。
- row_count: テーブル内の総行数
- data_size: カラムのデータサイズ
- ndv: カラムのカーディナリティ、つまりカラム内の異なる値の数
- null_count: カラム内の NULL 値を持つデータの量
- min: カラム内の最小値
- max: カラム内の最大値
基本統計は _statistics_.table_statistic_v1
テーブルに保存されます。このテーブルは、CelerData クラスターの _statistics_
データベースで確認できます。
ヒストグラム
CelerData は、基本統計を補完するためにヒストグラムを導入しています。ヒストグラムは、データ表現の効果的な方法と考えられています。データが偏っているテーブルに対して、ヒストグラムはデータ分布を正確に反映することができます。
CelerData は等高ヒストグラムを使用しており、いくつかのバケットで構 成されています。各バケットには同量のデータが含まれています。頻繁にクエリされ、選択性に大きな影響を与えるデータ値に対して、CelerData はそれらのために個別のバケットを割り当てます。バケットが多いほど推定が正確になりますが、メモリ使用量がわずかに増加する可能性があります。ヒストグラム収集タスクのためにバケット数と最も一般的な値(MCV)を調整できます。
ヒストグラムは、データが非常に偏っており、頻繁にクエリされるカラムに適用されます。テーブルデータが均一に分布している場合、ヒストグラムを作成する必要はありません。ヒストグラムは、数値、DATE、DATETIME、または文字列型のカラムにのみ作成できます。
現在、CelerData はヒストグラムの手動収集のみをサポートしています。ヒストグラムは _statistics_.histogram_statistics
テーブルに保存されます。
収集タイプと方法
テーブル内のデータサイズとデータ分布は常に変化しています。統計はデータの変化を表すために定期的に更新する必要があります。統計収集タスクを作成する前に、ビジネス要件に最も適した収集タイプと方法を選択する必要があります。
CelerData は、フル収集とサンプル収集の両方をサポートしており、自動および手動で実行できます。デフォルトでは、CelerData はテーブルのフル統計を自動的に収集します。5 分ごとにデータの更新を確認します。データの変更が検出されると、データ収集が自動的にトリガーされます。自動フル収集を使用したくない場合は、FE 設定項目 enable_collect_full_statistic
を false
に設定し、収集タスクをカスタマイズできます。
収集タイプ | 収集方法 | 説明 | 利点と欠点 |
---|---|---|---|
フル収集 | 自動/手動 | テーブル全体をスキャンして統計を収集します。統計はパーティションごとに収集されます。パーティションにデータの変更がない場合、このパーティションからデータは収集されず、リソース消費が削減されます。フル統計は _statistics_.column_statistics テーブルに保存されます。 | 利点: 統計が正確であり、CBO が正確な推定を行うのに役立ちます。欠点: システムリソースを消費し、遅いです。 |
サンプル収集 | 自動/手動 | テーブルの各パーティションから N 行のデータを均等に抽出します。統計はテーブルごとに収集されます。各カラムの基本統計は 1 レコードとして保存されます。カラムのカーディナリティ情報(ndv)は、サンプルデータに基づいて推定され、正確ではありません。サンプル統計は _statistics_.table_statistic_v1 テーブルに保存されます。 | 利点: システムリソースを消費せず、速いです。欠点: 統計が完全ではなく、コスト推定の正確性に影響を与える可能性があります。 |
統計の収集
CelerData は柔軟な統計収集方法を提供しています。自動、手動、またはカスタム収集のいずれかを選択し、ビジネスシナリオに最適な方法を選択できます。
自動フル収集
基本統計については、CelerData はデフォルトでテーブルのフル統計を自動的に収集し、手動操作を必要としません。統計が収集されていないテーブルについては、CelerData はスケジューリング期間内に自動的に統計を収集します。統計が収集されたテーブルについては、CelerData はテーブル内の総行数と変更された行数を更新し、定期的にこの情報を保持して自動収集をトリガーするかどうかを判断します。
自動収集をトリガーする条件:
- 前回の統計収集以降、テーブルデータが変更されました。
- テーブル統計の健康状態が指定されたしきい値(
statistic_auto_collect_ratio
)を下回っています。
統計の健康状態を計算するための式: 1 - 前回の統計収集以降に追加された行数/最小パーティションの総行数
- パーティションデータが変更されました。データが変更されていないパーティションは再収集されません。
自動フル収集はデフォルトで有効になっており、システムがデフォルト設定を使用して実行します。
以下の表はデフォルト設定を示しています。これらを変更する必要がある場合は、ADMIN SET CONFIG コマンドを実行してください。
FE |
---|