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 テーブルに保存されます。