共有データクラスタの Compaction
このトピックでは、StarRocks 共有データクラスタでの compaction の管理方法について説明します。
概要
StarRocks における compaction とは、データファイルの異なるバージョンを大きなファイルにマージするプロセスを指し、小さなファイルの数を減らし、クエリ効率を向上させます。共有なしクラスタと比較して、共有データクラスタは新しい compaction スケジューリングメカニズムを導入しており、以下の特徴があります:
- Compaction は FE によってスケジュールされ、CN によって実行されます。FE はパーティション単位で compaction タスクを開始します。
- 各 compaction は、データロードの完全なトランザクションプロセス(書き込み、コミット、公開)に従って新しいデータバージョンを生成します。
Compaction の管理
Compaction スコアの確認
シ ステムは各パーティションに対して compaction スコアを維持します。compaction スコアは、対応するパーティションのデータファイルのマージ状況を反映します。スコアが高いほど、パーティションのマージレベルが低く、マージ待ちのデータファイルのバージョンが多いことを意味します。FE は compaction タスクをトリガーするための参考として compaction スコアを使用し、あなたはパーティション内のデータバージョンが多すぎるかどうかの指標として compaction スコアを使用できます。
-
SHOW PROC ステートメントを使用して、特定のテーブルのパーティションの compaction スコアを確認できます。
SHOW PROC '/dbs/<database_name>/<table_name>/partitions'例:
mysql> SHOW PROC '/dbs/load_benchmark/store_sales/partitions';
+-------------+---------------+----------------+----------------+-------------+--------+--------------+-------+------------------------------+---------+----------+-----------+----------+------------+-------+-------+-------+
| PartitionId | PartitionName | CompactVersion | VisibleVersion | NextVersion | State | PartitionKey | Range | DistributionKey | Buckets | DataSize | RowCount | CacheTTL | AsyncWrite | AvgCS | P50CS | MaxCS |
+-------------+---------------+----------------+----------------+-------------+--------+--------------+-------+------------------------------+---------+----------+-----------+----------+------------+-------+-------+-------+
| 38028 | store_sales | 913 | 921 | 923 | NORMAL | | | ss_item_sk, ss_ticket_number | 64 | 15.6GB | 273857126 | 2592000 | false | 10.00 | 10.00 | 10.00 |
+-------------+---------------+----------------+----------------+-------------+--------+--------------+-------+------------------------------+---------+----------+-----------+----------+------------+-------+-------+-------+
1 row in set (0.20 sec) -
v3.1.9 および v3.2.4 以降、
information_schema.partitions_metaというシステム定義ビューをクエリすることで、パーティションの compaction スコアを確認することもできます。例:
mysql> SELECT * FROM information_schema.partitions_meta ORDER BY Max_CS LIMIT 10;
+--------------+----------------------------+----------------------------+--------------+-----------------+-----------------+----------------------+--------------+---------------+-----------------+-----------------------------------------+---------+-----------------+----------------+---------------------+-----------------------------+--------------+---------+-----------+------------+------------------+----------+--------+--------+-------------------------------------------------------------------+
| DB_NAME | TABLE_NAME | PARTITION_NAME | PARTITION_ID | COMPACT_VERSION | VISIBLE_VERSION | VISIBLE_VERSION_TIME | NEXT_VERSION | PARTITION_KEY | PARTITION_VALUE | DISTRIBUTION_KEY | BUCKETS | REPLICATION_NUM | STORAGE_MEDIUM | COOLDOWN_TIME | LAST_CONSISTENCY_CHECK_TIME | IS_IN_MEMORY | IS_TEMP | DATA_SIZE | ROW_COUNT | ENABLE_DATACACHE | AVG_CS | P50_CS | MAX_CS | STORAGE_PATH |
+--------------+----------------------------+----------------------------+--------------+-----------------+-----------------+----------------------+--------------+---------------+-----------------+-----------------------------------------+---------+-----------------+----------------+---------------------+-----------------------------+--------------+---------+-----------+------------+------------------+----------+--------+--------+-------------------------------------------------------------------+
| tpcds_1t | call_center | call_center | 11905 | 0 | 2 | 2024-03-17 08:30:47 | 3 | | | cc_call_center_sk | 1 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 12.3KB | 42 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11906/11905 |
| tpcds_1t | web_returns | web_returns | 12030 | 3 | 3 | 2024-03-17 08:40:48 | 4 | | | wr_item_sk, wr_order_number | 16 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 3.5GB | 71997522 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/12031/12030 |
| tpcds_1t | warehouse | warehouse | 11847 | 0 | 2 | 2024-03-17 08:30:47 | 3 | | | w_warehouse_sk | 1 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 4.2KB | 20 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11848/11847 |
| tpcds_1t | ship_mode | ship_mode | 11851 | 0 | 2 | 2024-03-17 08:30:47 | 3 | | | sm_ship_mode_sk | 1 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 1.7KB | 20 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11852/11851 |
| tpcds_1t | customer_address | customer_address | 11790 | 0 | 2 | 2024-03-17 08:32:19 | 3 | | | ca_address_sk | 16 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 120.9MB | 6000000 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11791/11790 |
| tpcds_1t | time_dim | time_dim | 11855 | 0 | 2 | 2024-03-17 08:30:48 | 3 | | | t_time_sk | 16 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 864.7KB | 86400 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11856/11855 |
| tpcds_1t | web_sales | web_sales | 12049 | 3 | 3 | 2024-03-17 10:14:20 | 4 | | | ws_item_sk, ws_order_number | 128 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 47.7GB | 720000376 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/12050/12049 |
| tpcds_1t | store | store | 11901 | 0 | 2 | 2024-03-17 08:30:47 | 3 | | | s_store_sk | 1 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 95.6KB | 1002 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11902/11901 |
| tpcds_1t | web_site | web_site | 11928 | 0 | 2 | 2024-03-17 08:30:47 | 3 | | | web_site_sk | 1 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 13.4KB | 54 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11929/11928 |
| tpcds_1t | household_demographics | household_demographics | 11932 | 0 | 2 | 2024-03-17 08:30:47 | 3 | | | hd_demo_sk | 1 | 1 | HDD | 9999-12-31 23:59:59 | NULL | 0 | 0 | 2.1KB | 7200 | 0 | 0 | 0 | 0 | s3://XXX/536a3c77-52c3-485a-8217-781734a970b1/db10328/11933/11932 |
+--------------+----------------------------+----------------------------+--------------+-----------------+-----------------+----------------------+--------------+---------------+-----------------+-----------------------------------------+---------+-----------------+----------------+---------------------+-----------------------------+--------------+---------+-----------+------------+------------------+----------+--------+--------+-------------------------------------------------------------------+
次の2つのメトリクスに注目する必要があります:
AvgCS: パーティション内のすべての tablet の平均 compaction スコア。MaxCS: パーティション内のすべての tablet の中で最大の compaction スコア。
Compaction タスクの確認
新しいデータがシステムにロードされると、FE は異なる CN ノードで実行される compaction タスクを常にスケジュールします。まず、FE 上の compaction タスクの一般的なステータスを確認し、次に CN 上の各タスクの実行詳細を確認できます。
Compaction タスクの一般的なステータスの確認
SHOW PROC ステートメントを使用して、compaction タスクの一般的なステータスを確認できます。
SHOW PROC '/compactions';
例:
mysql> SHOW PROC '/compactions';
+---------------------+-------+---------------------+---------------------+---------------------+-------+--------------------------------------------------------------------------------------------------------------------+
| Partition | TxnID | StartTime | CommitTime | FinishTime | Error | Profile |
+---------------------+-------+---------------------+---------------------+---------------------+-------+--------------------------------------------------------------------------------------------------------------------+
| ssb.lineorder.43026 | 51053 | 2024-09-24 19:15:16 | NULL | NULL | NULL | NULL |
| ssb.lineorder.43027 | 51052 | 2024-09-24 19:15:16 | NULL | NULL | NULL | NULL |
| ssb.lineorder.43025 | 51047 | 2024-09-24 19:15:15 | NULL | NULL | NULL | NULL |
| ssb.lineorder.43026 | 51046 | 2024-09-24 19:15:04 | 2024-09-24 19:15:06 | 2024-09-24 19:15:06 | NULL | {"sub_task_count":1,"read_local_sec":0,"read_local_mb":31,"read_remote_sec":0,"read_remote_mb":0,"in_queue_sec":0} |
| ssb.lineorder.43027 | 51045 | 2024-09-24 19:15:04 | 2024-09-24 19:15:06 | 2024-09-24 19:15:06 | NULL | {"sub_task_count":1,"read_local_sec":0,"read_local_mb":31,"read_remote_sec":0,"read_remote_mb":0,"in_queue_sec":0} |
| ssb.lineorder.43029 | 51044 | 2024-09-24 19:15:03 | 2024-09-24 19:15:05 | 2024-09-24 19:15:05 | NULL | {"sub_task_count":1,"read_local_sec":0,"read_local_mb":31,"read_remote_sec":0,"read_remote_mb":0,"in_queue_sec":0} |
+---------------------+-------+---------------------+---------------------+---------------------+-------+--------------------------------------------------------------------------------------------------------------------+
以下のフィールドが返されます:
Partition: Compaction タスクが属するパーティション。TxnID: Compaction タスクに割り当てられたトランザクション ID。StartTime: Compaction タスクが開始する時間。NULLはタスクがまだ開始されていないことを示します。CommitTime: Compaction タスクがデータをコミットする時間。NULLはデータがまだコミットされていないことを示します。FinishTime: Compaction タスクがデータを公開する時間。NULLはデータがまだ公開されていないことを示します。Error: Compaction タスクのエラーメッセージ(ある場合)。Profile: (v3.2.12 および v3.3.4 からサポート) Compaction タスクが完了した後のプロファイル。sub_task_count: パーティション内のサブタスク(tablet に相当)の数。read_local_sec: ローカルキャッシュからデータを読み取るすべてのサブタスクの合計時間。単位: 秒。read_local_mb: ローカルキャッシュからすべてのサブタスクが読み取ったデータの合計サイズ。単位: MB。read_remote_sec: リモートストレージからデータを読み取るすべてのサブタスクの合計時間。単位: 秒。read_remote_mb: リモートストレージからすべてのサブタスクが読み取ったデータの合計サイズ。単位: MB。in_queue_sec: すべてのサブタスクがキューに滞在する合計時間。単位: 秒。
Compaction タスクの実行詳細の確認
各 compaction タスクは複数のサブタスクに分割され、それぞれが tablet に対応します。information_schema.be_cloud_native_compactions というシステム定義ビューをクエリすることで、各サブタスクの実行詳細を確認できます。
例:
mysql> SELECT * FROM information_schema.be_cloud_native_compactions;
+-------+--------+-----------+---------+---------+------+---------------------+-------------+----------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| BE_ID | TXN_ID | TABLET_ID | VERSION | SKIPPED | RUNS | START_TIME | FINISH_TIME | PROGRESS | STATUS | PROFILE |
+-------+--------+-----------+---------+---------+------+---------------------+-------------+----------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 10001 | 51047 | 43034 | 12 | 0 | 1 | 2024-09-24 19:15:15 | NULL | 82 | | {"read_local_sec":0,"read_local_mb":31,"read_remote_sec":0,"read_remote_mb":0,"read_remote_count":0,"read_local_count":1900,"segment_init_sec":0,"column_iterator_init_sec":0,"in_queue_sec":0} |
| 10001 | 51048 | 43032 | 12 | 0 | 1 | 2024-09-24 19:15:15 | NULL | 82 | | {"read_local_sec":0,"read_local_mb":32,"read_remote_sec":0,"read_remote_mb":0,"read_remote_count":0,"read_local_count":1900,"segment_init_sec":0,"column_iterator_init_sec":0,"in_queue_sec":0} |
| 10001 | 51049 | 43033 | 12 | 0 | 1 | 2024-09-24 19:15:15 | NULL | 82 | | {"read_local_sec":0,"read_local_mb":31,"read_remote_sec":0,"read_remote_mb":0,"read_remote_count":0,"read_local_count":1900,"segment_init_sec":0,"column_iterator_init_sec":0,"in_queue_sec":0} |
| 10001 | 51051 | 43038 | 9 | 0 | 1 | 2024-09-24 19:15:15 | NULL | 84 | | {"read_local_sec":0,"read_local_mb":31,"read_remote_sec":0,"read_remote_mb":0,"read_remote_count":0,"read_local_count":1900,"segment_init_sec":0,"column_iterator_init_sec":0,"in_queue_sec":0} |
| 10001 | 51052 | 43036 | 12 | 0 | 0 | NULL | NULL | 0 | | |
| 10001 | 51053 | 43035 | 12 | 0 | 1 | 2024-09-24 19:15:16 | NULL | 2 | | {"read_local_sec":0,"read_local_mb":1,"read_remote_sec":0,"read_remote_mb":0,"read_remote_count":0,"read_local_count":100,"segment_init_sec":0,"column_iterator_init_sec":0,"in_queue_sec":0} |
+-------+--------+-----------+---------+---------+------+---------------------+-------------+----------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
以下のフィールドが返されます:
BE_ID: CN の ID。TXN_ID: サブタスクが属するトランザクションの ID。TABLET_ID: サブタスクが属する tablet の ID。VERSION: tablet のバージョン。RUNS: サブタスクが実行された回数。START_TIME: サブタスクが開始する時間。FINISH_TIME: サブタスクが終了する時間。PROGRESS: tablet の compaction 進捗状況(パーセンテージ)。STATUS: サブタスクのステータス。エラーメッセージがある場合、このフィールドに返されます。PROFILE: (v3.2.12 および v3.3.4 からサポート) サブタスクの実行時プロファイル。read_local_sec: サブタスクがローカルキャッシュからデータを読み取る時間。単位: 秒。read_local_mb: サブタスクがローカルキャッシュから読み取ったデータのサイズ。単位: MB。read_remote_sec: サブタスクがリモートストレージからデータを読み取る時間。単位: 秒。read_remote_mb: サブタスクがリモートストレージから読み取ったデータのサイズ。単位: MB。read_local_count: サブタスクがローカルキャッシュからデータを読み取った回数。read_remote_count: サブタスクがリモートストレージからデータを読み取った回数。in_queue_sec: サブタスクがキューに滞在する時間。単位: 秒。
Compaction タスクの設定
これらの FE および CN (BE) パラメータを使用して compaction タスクを設定できます。
FE パラメータ
次の FE パラメータを動的に設定できます。
例:
ADMIN SET FRONTEND CONFIG ("lake_compaction_max_tasks" = "-1");