Gather CBO statistics
CBOの統計情報の収集
このトピックでは、StarRocksのCBO(コストベースの最適化)の基本的な概念と、CBOの統計情報の収集方法について説明します。StarRocks 2.4では、正確なデータ分布統計を収集するためにヒストグラムが導入されています。
CBOとは
コストベースの最適化(CBO)は、クエリの最適化において重要な役割を果たします。SQLクエリがStarRocksに到着すると、まず論理的な実行計画にパースされます。CBOは、論理プランを複数の物理実行計画に書き換えて変換します。CBOは、プラン内の各オペレータ(CPU、メモリ、ネットワーク、I/Oなど)の実行コストを推定し、最もコストの低いクエリパスを最終的な物理計画として選択します。
StarRocks CBOは、StarRocks 1.16.0で開始され、1.19以降はデフォルトで有効になっています。StarRocks CBOは、Cascadesフレームワークに基づいて開発されており、さまざまな統計情報に基づいてコストを推定します。数万の実行計画の中から最もコストの低い実行計画を選択し、複雑なクエリの効率とパフォーマンスを大幅に改善することができます。
統計情報はCBOにとって重要です。統計情報が正確で有用かどうかは、コストの推定精度に影響します。以下のセクションでは、統計情報の種類、収集方針、および統計情報の収集方法と表示方法について詳しく説明します。
統計情報の種類
StarRocksは、コストの推定に必要なさまざまな統計情報を収集します。
基本統計情報
デフォルトで、StarRocksはテーブルと列の次の基本統計情報を定期的に収集します。
- row_count:テーブル内の行数の合計
- data_size:列のデータサイズ
- ndv:列の基数、つまり列内の一意の値の数
- null_count:列内のNULL値のデータの量
- min:列内の最小値
- max:列内の最大値
基本統計情報は、_statistics_.table_statistic_v1
テーブルに保存されます。StarRocksクラスタの_statistics_
データベース内でこのテーブルを表示できます。
ヒストグラム
StarRocks 2.4では、ヒストグラムが導入され、基本統計情報を補完します。ヒストグラムは、効果的なデータ表現方法と考えられています。データの偏りがあるテーブルでは、ヒストグラムはデータの分布を正確に反映することができます。
StarRocksは、等高ヒストグラムを使用します。これは、いくつかのバケットに構築されます。各バケットには同じ量のデータが含まれます。頻繁にクエリされ、選択的に大きな影響を与えるデータ値については、別々のバケットが割り当てられます。バケットが多ければ正確な推定が可能ですが、メモリ使用量がわずかに増加する可能性もあります。ヒストグラムの収集タスクのバケット数と最も一般的な値(MCV)の数を調整することができます。
ヒストグラムは、データの分散が非常に大きい列や頻繁にクエリされる列に適用されます。テーブルのデータが均一に分布している場合、ヒストグラムを作成する必要はありません。ヒストグラムは、数値、DATE、DATETIME、または文字列型の列のみで作成できます。
現在、StarRocksは手動でのヒストグラムの収集のみをサポートしています。ヒストグラムは、_statistics_
データベースのhistogram_statistics
テーブルに保存されます。
収集タイプと方法
テーブル内のデータサイズとデータ分布は常に変動します。データの変化を反映するために、統計情報は定期的に更新する必要があります。統計情報の収集タスクを作成する前に、ビジネス要件に最適な収集タイプと収集方法を選択する必要があります。
StarRocksでは、フル収集とサンプル収集の両方を自動的および手動でサポートしています。デフォルトでは、StarRocksはテーブルの完全な統計情報を自動的に収集します。データの変更を5分ごとにチェックします。データの変更が検出されると、データ収集が自動的にトリガされます。自動フル収集を使用しない場合は、FEの設定項目enable_collect_full_statistic
をfalse
に設定し、カスタム収集タスクをカスタマイズすることもできます。
収集タイプ | 収集方法 | 説明 | 利点とデメリット |
---|---|---|---|
フル収集 | 自動/手動 | テーブルのフルスキャンを行い、統計情報を収集します。統計情報はパーティションごとに収集されます。パーティションにデータの変更がな い場合、そのパーティションからデータは収集されず、リソースの消費を減らすことができます。フルの統計情報は | 利点:統計情報が正確であり、CBOの正確な推定をサポートします。デメリット:システムリソースを消費し、遅いです。2.5以降、StarRocksは自動収集タスクの実行期間を指定できるようになり、リソース消費を削減できます。 |
サンプル収集 | 自動/手動 | テーブルの各パーティションから均等に | 利点:システムリソースを消費せず、高速です。デメリット:統計情報が不完全であるため、コスト推定の正確性に影響を与える可能性があります。 |
統計情報の収集
StarRocksでは、柔軟な統計情報の収集方法が提供されています。ビジネスシナリオに応じて、自動、手動、またはカスタムの収集方法を選択できます。
自動フル収集
基本統計情報については、デフォルトでStarRocksが自動的にテーブルのフル統計情報を収集します。フル統計情報が収集されていないテーブルでは、StarRocksは指定した収集期間内に自動的に統計情報を収集します。フル統計情報が収集されたテーブルでは、StarRocksはテーブル内の総行数と変更された行数を更新し、この情報を定期的に永続化して自動収集をトリガするかどうかを判断します。
2.5以降、StarRocksでは、自動フル収集のための収集期間を指定することができるようになり、自動フル収集によるクラスタのパフォーマンスのジッター を防ぐことができます。この期間は、FEパラメータstatistic_auto_analyze_start_time
およびstatistic_auto_analyze_end_time
で指定します。
以下の条件が自動収集をトリガします。
- 前回の統計情報収集以降、テーブルのデータが変更された場合。
- 統計情報の健全性が指定されたしきい値(
statistic_auto_collect_ratio
)未満の場合。
統計情報の健全性の計算式:1 - 前回の統計情報収集以降に追加された行数/最小のパーティションの総行数
- パーティションのデータが変更された場合。データが変更されていないパーティションは再び収集されません。
- 収集時間が設定された収集期間内にある場合(デフォルトの収集期間は一日中です)。
自動フル収集はデフォルトで有効になっており、システムによって実行されるデフォルトの設定で実行されます。
次の表に、デフォルトの設定について説明します。変更する必要がある場合は、ADMIN SET CONFIGコマンドを実行してください。
FE設定項目 | タイプ | デフォルト値 | 説明 |
---|---|---|---|
enable_statistic_collect | BOOLEAN | TRUE | 統計情報の収集を実行するかどうかを示します。デフォルトでは、この設定はONになっています。 |
enable_collect_full_statistic | BOOLEAN | TRUE | 自動フル収集を有効にするかどうかを示します。デフォルトでは、この設定はONになっています。 |
statistic_collect_interval_sec | LONG | 300 | 自動収集の間隔です。デフォルトの時間単位は秒です。 |
statistic_auto_collect_ratio | FLOAT | 0.8 | 自動収集の統計情報が健全かどうかを判断するためのしきい値です。統計情報の健全性がこのしきい値を下回ると、自動収集がトリガされます。 |
statistic_max_full_collect_data_size | LONG | 107374182400 | 自動収集でデータを収集する最大パーティションサイズです。単位はバイトです。パーティションがこの値を超える場合、フル収集は破棄され、代わりにサンプル収集が実行されます。 |
statistic_collect_max_row_count_per_query | INT | 5000000000 | 単一の解析タスクに対してクエリする最大行数です。この値を超える場合、解析タスクは複数のクエリに分割されます。 |
statistic_auto_analyze_start_time | STRING | 00:00:00 | 自動収集の開始時刻です。値の範囲は |
statistic_auto_analyze_end_time | STRING | 23:59:59 | 自動収集の終了時刻です。値の範囲は |
ほとんどの統計情報の収集には自動的なジョブを頼りにすることができますが、特定の統計要件がある場合は、ANALYZE TABLEステートメントを実行してマニュアルなタスクを作成するか、CREATE ANALYZEステートメントを実行してカスタムな自動タスクをカスタマイズすることができます。