CBO の統計情報を収集する
このトピックでは、StarRocks のコストベースオプティマイザ (CBO) の基本概念と、CBO が最適なクエリプランを選択するための統計情報の収集方法について説明します。StarRocks 2.4 では、正確なデータ分布統計を収集するためにヒストグラムが導入されました。
v3.2.0 以降、StarRocks は Hive、Iceberg、Hudi テーブルからの統計情報の収集をサポートしており、他のメタストアシステムへの依存を減らしています。構文は StarRocks 内部テーブルの収集と似ています。
CBO とは
CBO はクエリ最適化において重要です。SQL クエリが StarRocks に到着すると、論理実行プランに解析されます。CBO は論理プランを複数の物理実行プランに書き換え、変換します。その後、CBO はプラン内の各オペレーターの実行コスト(CPU、メモリ、ネットワーク、I/O など)を推定し、最もコストが低いクエリパスを最終的な物理プランとして選択します。
StarRocks CBO は StarRocks 1.16.0 で導入され、1.19 以降でデフォルトで有効になっています。Cascades フレームワークに基づいて開発された StarRocks CBO は、さまざまな統計情報に基づいてコストを推定します。数万の実行プランの中から最もコストの低い実行プランを選択することができ、複雑なクエリの効率とパフォーマンスを大幅に向上させます。
統計情報は CBO にとって重要です。これにより、コスト推定が正確で有用であるかどうかが決まります。以下のセクションでは、統計情報の種類、収集ポリシー、統計情報の収集方法、および統計情報の表示方法について詳しく説明します。
統計情報の種類
StarRocks は、コスト推定の入力としてさまざまな統計情報を収集します。
基本統計
デフォルトで、StarRocks は定期的にテーブルと列の以下の基本統計を収集します。
-
row_count: テーブル内の総行数
-
data_size: 列のデータサイズ
-
ndv: 列のカーディナリティ(列内の異なる値の数)
-
null_count: 列内の NULL 値を持つデータの量
-
min: 列内の最小値
-
max: 列内の最大値
完全な統計情報は _statistics_ データベースの column_statistics に保存されます。このテーブルを表示してテーブル統計をクエリできます。以下は、このテーブルから統計データをクエリする例です。
SELECT * FROM _statistics_.column_statistics\G
*************************** 1. row ***************************
table_id: 10174
partition_id: 10170
column_name: is_minor
db_id: 10169
table_name: zj_test.source_wiki_edit
partition_name: p06
row_count: 2
data_size: 2
ndv: NULL
null_count: 0
max: 1
min: 0