共有データクラスタの Compaction
このトピックでは、StarRocks 共有データクラスタにおける compaction の管理方法について説明します。
概要
StarRocks の各データロード操作は、新しいバージョンのデータファイルを生成します。Compaction は異なるバージョンのデータファイルをより大きなファイルにマージし、小さなファイルの数を減らし、クエリ効率を向上させます。
Compaction スコア
概要
Compaction スコア は、パーティション内のデータファイルのマージ状況を反映します。スコアが高いほどマージの進捗が低いことを示し、パーティションには未マージのデータファイルバージョンが多く存在します。FE は各パーティションの Compaction スコア情報を保持しており、Max Compaction スコア(パーティション内のすべてのタブレットの中で最も高いスコア)を含みます。
パーティションの Max Compaction スコアが FE パラメータ lake_compaction_score_selector_min_score(デフォルト: 10)を下回る場合、そのパーティションの compaction は完了と見なされます。Max Compaction スコアが 100 を超える と、compaction の状態が不健全であることを示します。スコアが FE パラメータ lake_ingest_slowdown_threshold(デフォルト: 100)を超えると、システムはそのパーティションのデータロードトランザクションのコミットを遅らせます。lake_compaction_score_upper_bound(デフォルト: 2000)を超えると、そのパーティションのインポートトランザクションを拒否します。
計算ルール
通常、各データファイルは Compaction スコアに 1 を寄与します。例えば、あるパーティションに 1 つのタブレットと最初のロード操作から生成された 10 個のデータファイルがある場合、そのパーティションの Max Compaction スコアは 10 です。タブレット内のトランザクションによって生成されたすべてのデータファイルは Rowset としてグループ化されます。
スコア計算中、タブレットの Rowset はサイズごとにグループ化され、ファイル数が最も多いグループがタブレットの Compaction スコアを決定します。
例えば、あるタブレットが 7 回のロード操作を受け、Rowset のサイズが 100 MB, 100 MB, 100 MB, 10 MB, 10 MB, 10 MB, 10 MB であるとします。計算中、システムは 3 つの 100 MB Rowset を 1 つのグループにし、4 つの 10 MB Rowset を別のグループにします。Compaction スコアはファイル数が多いグループに基づいて計算されます。この場合、2 番目のグループがより大きな compaction スコアを持ちます。compaction はスコアの高いグループを優先するため、最初の compaction 後の Rowset の分布は 100 MB, 100 MB, 100 MB, 40 MB となります。
Compaction ワークフロー
共有データクラスタでは、StarRocks は新しい FE 制御の compaction メカニズムを導入しています。
- スコア計算: Leader FE ノードがトランザクション公開結果に基づいてパーティションの Compaction スコアを計算し、保存します。
- 候補選択: FE は Max Compaction スコアが最も高いパーティションを compaction 候補として選択します。
- タスク生成: FE は選択されたパーティションの compaction トランザクションを開始し、タブレットレベルのサブタスクを生成し、FE パラメータ
lake_compaction_max_tasksで設定された制限に達するまで Compute Node (CN) に配布します。 - サブタスク実行: CN はバックグラウンドで compaction サブタスクを実行します。CN ごとの同時サブタスク数は CN パラメータ
compact_threadsによって制御されます。 - 結果収集: FE はサブタスクの結果を集約し、compaction トランザクションをコミットします。
- 公開: FE は正常にコミットされた compaction トランザクションを公開します。