借你慧眼,把 StarRocks Compaction 看得明明白白

说明

StarRocks 中 Compaction 是为了将不同版本的数据文件进行整合,合并成大文件的动作,减少系统中小文件数量,进而提升查询效率。相比于存算一体表,StarRocks 存算分离实现了新的 Compaction 调度机制,表现为:

  1. Compaction 调度由 FE 发起,BE执行。FE 按照 Partition 为单位来发起 Compaction 任务
  2. Compaction 会生成一个新版本,也走导入的写数据、commit、publish version 这套完整流程

本文提供 Compaction 相关的参数调优说明,供实践参考。关于 StarRocks 存算分离的 Compaction 原理解读,可移步这里:

丁凯:https://zhuanlan.zhihu.com/p/687354691

查看分区的 Compaction score

注意:以下命令需要连接 Leader FE 节点执行

StarRocks 在内部为每个分区(Partition) 维护了一个 Compaction Score 值,它反映了分区当前数据文件合并情况,Compaction score 越高,代表了数据文件合并程度越低。

StarRocks 提供了命令可查看 Partition 当前的 Compaction Score,FE 会以此作为发起 Compaction 任务的参考,用户也可以此作为判断当前Partition 是否存在版本数过多的依据:

方法1:

e3b0f11c047d804435734366b302485b.jpeg

方法2:自从新版本 3.1.9 & 3.2.4 ,我们在系统表中增加了 partitions_meta 表,方便用户通过各种复杂 SQL 来查看系统所有 Partition 信息:

ebcc685a271b39cf0704a863567b707e.jpeg

需要关注以下参数:

  • AvgCS:当前 Partition 上所有 Tablet 平均 Compaction Score
  • MaxCS: 当前 Partition 上所有 Tablet 最大 Compaction Score

查看 Compaction 任务

随着导入任务的执行,系统内部也在不断地调度执行 Compaction 任务,这些任务会被发往计算节点 CN 执行,系统也提供了一系列命令可以查看当前 Compaction 任务执行情况。

首先,用户可以通过如下命令来观察系统当前所有 Compaction 任务的整体情况:

6c15532e3b572dc6603bf4882d398a85.jpeg

上面显示了当前有一个Compaction 任务正在进行,其各字段含义如下:

Partition:当前正在进行的 Compaction 任务针对的 Partition
TxnID:FE 为当前 Compaction 任务分配的事务 id
StartTime:该 Compaction 任务的开始时间
CommitTime:该 Compaction 任务的 Commit 时间
FinishTime:该 Compaction 任务的结束时间
Error:该 Compaction 任务出错信息,如果一切正常,值为NULL

上面的命令展示了每个 Partition 上对应的 Compaction 任务总体情况。而每个 Compaction 任务底层会被按照 Tablet 分为多个子任务,系统也提供了如下命令来观察每个 Compaction 子任务的详细进展情况:

a8ede7c76bdd62ab48851bfdd8b78f88.jpeg

由于该 Partition 有 64 个 Tablet,因而,这里逐一展示了64 个 Tablet 的 Compaction 完成情况,关注两个字段:

  • PROGRESS:代表 Tablet 当前 Compaction 进展情况,为百分比
  • STATUS:代表任务状态,如果有错误,这里会展示错误详细信息

取消 Compaction 任务

用户可以通过下面的命令来取消特定的 Compaction 任务。需要注意的是,该命令需要连接 Leader FE 节点执行

CANCEL COMPACTION WHERE TXN_ID = 123;


参数调优

StarRocks中有如下参数来控制存算分离下的 Compaction 行为。

FE 参数

# 最小的Compaction score,低于该值的 Partition 不会发起Compaction任务 lake_compaction_score_selector_min_score = 10.0;

 # FE 上可同时发起的 Compaction Task 数量

 # 默认值为-1,即FE会根据系统中 BE 数量自动计算 

# 如果设置为0,则 FE 不会发起任何 Compaction 任务 lake_compaction_max_tasks = -1;


# 控制show proc '/compactions' 显示的结果数量,默认为12 lake_compaction_history_size = 12; 

lake_compaction_fail_history_size = 12;

FE 所有上述 Compaction 相关参数均可通过 SQL 命令动态修改,例如:

admin set frontend config ("lake_compaction_max_tasks" = "0");


BE / CN 参数

# 控制 BE/CN 上同时执行 Compaction 任务的线程数,默认值为4 

# 也即 BE 上可同时为多少个 Tablet进行 Compaction 

compact_threads = 4 


 # BE 上 Compaction任务队列大小,控制可接收来自FE的最大Compaction 任务数 

# 默认值为100 

compact_thread_pool_queue_size = 100


 # 单次 Compaction 任务最多合并的数据文件数量,默认为1000 

# 在实践中我们建议将该值调整为100,这样,每个 Compaction Task 可以更快速地结束 

# 且消耗更少的资源 

max_cumulative_compaction_num_singleton_deltas=100


BE 所有上述 Compaction 相关参数在新版本中已经支持动态修改,可以通过如下方式修改:

mysql> update information_schema.be_configs set value = 8 where name = "compact_threads"; Query OK, 0 rows affected (0.01 sec)


最佳实践

因为 Compaction 对于查询性能的影响至关重要,因此,我们建议用户时刻关注系统中表与分区的后台数据合并情况,在这里我们给用户提供几点最佳实践的建议和指导。

  1. 关注 Compaction Score,根据指标配置告警。StarRocks 自带的 Grafana 监控模板已经包含了该指标
  2. 关注 Compaction 消耗的资源情况,尤其是内存。StarRocks 自带的 Grafana 监控模板已经包含了该指标
  3. 在资源较空闲时可增加计算节点上并行 Compaction 工作线程数,以加快 Compaction 任务的执行
  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值