Doris Compaction机制总结

Doris Compaction机制总结1 参考文档 Doris 最佳实践 Compaction 调优 1 Doris 最佳实践 Compaction 调优 2 Doris 全面解析 DorisCompact 机制解析按顺序读完这三篇文章 就能对 Doris 的 compaction 机制很熟悉了 2 总结 2 1 读写方式 2 1 1 写入 Doris 数据写入模型使用了 LSM Tree 随机写变为顺序写 面向写优化 数据追加的方式写入磁盘 2 1 2 读取读逻辑上 需要通过 Merge on Read 方式 2 2 3 compaction 目的

1、参考文档

顺序读完这三篇文章,就能对Doris的compaction机制很熟悉了

2、总结

2.1、读写方式

2.1.1、写入

Doris数据写入模型使用了LSM-Tree(随机写变为顺序写,面向写优化),数据追加的方式写入磁盘

2.1.2、读取

读逻辑上,需要通过Merge-on-Read方式

2.2.3、compaction目的

  • 一是避免在读取时大量的 Merge 操作
  • 二是避免大量的数据版本导致的随机IO

2.2、Compaction优点

  • 数据更加有序
  • 消除数据变更
  • 增加数据聚合度

2.3、Compaction 的问题

合理的设置表的分区、分桶和副本数量,避免过多的分片,可以降低Compaction的开销。

2.4、数据版本的产生

2.5、Base & Cumulative Compaction

如果只有 Base Compaction,则每次增量数据都要和全量的基线数据合并,写放大问题会非常严重,并且每次 Compaction 都相当耗时。

在合理范围内,尽量减少 Base Compaction 操作。

2.6、数据分片选择策略

tablet的“读取频率” 和 “版本数量” 会根据各自的权重,综合计算出一个 Compaction 分数,分数越高的分片,优先做 Compaction。

  • compaction_tablet_scan_frequency_factor:“读取频率” 的权重值,默认为 0。
  • compaction_tablet_compaction_score_factor:“版本数量” 的权重,默认为 1。

“读取频率” 的权重值默认为0,即默认仅考虑 “版本数量” 这个因素。

2.7、Compaction 是一个 生产者-消费者 模型

2.7.1、生产者

generate_compaction_tasks_min_interval_ms
每生产一轮compaction任务,producer线程会休眠10ms。

2.7.2、消费者

Doris 限制了每个磁盘上能够同时进行的 Compaction 任务数量,以及节点整体的任务数量

compaction_task_num_per_disk:每个磁盘上的任务数,默认为2。该参数必须大于等于2,以保证 BC 和 CC 任务各自至少有一个线程。

max_compaction_threads:消费者线程,即Compaction线程的总数。默认为 10

total_permits_for_compaction_score:Compaction 任务配额,默认 10000

compaction_task_num_per_disk max_compaction_threads total_permits_for_compaction_score 

三个配置共同决定了节点所能承受的 Compaction 任务数量。

2.8、 数据版本选择策略

2.8.1、BC

base_compaction_num_cumulative_deltas:
一次 BC 任务最小版本数量限制。默认为5。该参数主要为了避免过多 BC 任务。当数据版本数量较少时,BC 是没有必要的

base_compaction_interval_seconds_since_last_operation
当 Doris 发现一个 tablet 长时间没有执行过 BC 任务时,也会触发 BC 任务。这个参数就是控制这个时间的,默认是86400,单位是

2.8.2、CC

  • num_based cumulative compaction是基于rowset的文件数量进行compaction的选择,该策略会在后面的版本中被丢弃。
  • size_based cumulative compaction策略通过计算每个rowset的大小来决定compaction的选择,可以显著地减少写放大的系数。

max_cumulative_compaction_num_singleton_deltas
一次 CC 任务最大的版本数量限制,默认1000

cumulative_size_based_compaction_lower_size_mbytes
一次 CC 任务最少的数据量,和min_cumulative_compaction_num_singleton_delta 同时(&&关系)判断。默认是 64,单位是 MB。

简单来说,默认配置下,就是从 CP 版本开始往后选取 rowset。最少选5个,最多选 1000 个,然后判断数据量是否大于阈值即可。

2.8.3、设置新的CP

cumulative_size_based_promotion_min_size_mbytes:最小晋升大小,默认 64,单位 MB。

cumulative_size_based_promotion_size_mbytes:最大晋升大小,默认 1024,单位 MB。

2.9、其他 Compaction 参数和注意事项

disable_auto_compaction:默认为 false,修改为 true 则会禁止 Compaction 操作。
该参数仅在一些调试情况,或者 compaction 异常需要临时关闭的情况下才需使用。

3、相关参数总结

 #选择tablet进行compaction时,计算 tablet score 的公式中 tablet scan frequency 的权重 compaction_tablet_scan_frequency_factor 0 #选择tablet进行compaction时,计算 tablet score 的公式中 compaction score的权重。 compaction_tablet_compaction_score_factor 1 #每生产一轮compaction任务,producer线程会休眠10ms。 generate_compaction_tasks_min_interval_ms 10 #Compaction任务的生产者每次连续生产多少轮cumulative compaction任务后生产一轮base compaction。 cumulative_compaction_rounds_for_each_base_compaction_round 9 #每个磁盘可以并发执行的compaction任务数量。 compaction_task_num_per_disk 2 #Compaction线程池中线程数量的最大值。 max_compaction_threads #被所有的compaction任务所能持有的 “permits” 上限,用来限制compaction占用的内存。 total_permits_for_compaction_score 10000 #Cumulative文件数目要达到的限制,达到这个限制之后会触发BaseCompaction base_compaction_num_cumulative_deltas 5 #BaseCompaction触发条件之一:上一次BaseCompaction距今的间隔 base_compaction_interval_seconds_since_last_operation 86400 #cumulative compaction策略:最小增量文件的数量 min_cumulative_compaction_num_singleton_deltas 5 #cumulative compaction策略:最大增量文件的数量 max_cumulative_compaction_num_singleton_deltas 100 #在size_based策略下,cumulative compaction进行合并时,选出的要进行合并的rowset的总磁盘大小大于此配置时, #才按级别策略划分合并。小于这个配置时,直接执行合并。单位是m字节。 #简单来说,默认配置下,就是从 CP 版本开始往后选取 rowset。最少选5个,最多选 1000 个,然后判断数据量是否大于阈值即可。 cumulative_size_based_compaction_lower_size_mbytes 64m #(CC输出的rowset大小)/(BC所有rowset大小)晋升比率(这是一个量级)。 cumulative_size_based_promotion_ratio 0.05#CC输出的rowset大小最小阈值 cumulative_size_based_promotion_min_size_mbytes:最小晋升大小,默认 64,单位 MB。 #CC输出的rowset大小最大阈值 cumulative_size_based_promotion_size_mbytes:最大晋升大小,默认 1024,单位 MB。 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233556.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月9日 下午3:01
下一篇 2025年7月9日 下午3:22


相关推荐

  • 【2022最新Java面试宝典】—— SpringBoot面试题(44道含答案)

    【2022最新Java面试宝典】—— SpringBoot面试题(44道含答案)目录1.什么是SpringBoot?2.为什么要用SpringBoot3.SpringBoot与SpringCloud区别4.SpringBoot有哪些优点?5.SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?6.SpringBoot支持哪些日志框架?推荐和默认的日志框架是哪个?7.SpringBootStarter的工作原理8.SpringBoot2.X有什么新特性?与1.X有什么区别?9.SpringBoot支持什么前端模板,10.Spr

    2022年7月15日
    49
  • 5gwifi信道哪个最好,wifi信道在哪里设置如何检测哪个路由器信道最快

    5gwifi信道哪个最好,wifi信道在哪里设置如何检测哪个路由器信道最快5G的WIFI信道选择相当重要,在不同的国家为了保证政府与军用部分与5G相交频道的使用,通过网卡驱动锁定或路由器固件锁定了5G的WIFI信道使用权限,而这些被锁定的频道,使用性能都是相对好,受到自然或非自然因素干扰最少的;而突破这些限制,才能发挥5G的WIFI真正性能。  双频路由器5ghz设置哪个信道最好  1、国内规定可用的5G信道只有149、153、157、161、165这5个(…

    2022年5月2日
    4.7K
  • coze智能客服怎么保存记录

    coze智能客服怎么保存记录

    2026年3月12日
    3
  • 股票历史数据库(腾讯股票历史数据接口)

    歪枣网财经数据下载接口集合,百度搜索歪枣网官网序号 名称 接口描述 数据字段 更新日期 操作0 A股列表 沪深京A股基本信息 code股票代码name股票名称stype股票类型,1:深证股票,2:上证股票,3:北证股票,4:港股hsgt沪深港通,1:沪股通:2:深股通、3:港股通(沪)、4:港股通(深)、5:港股通(沪+深)bk所属板块,个股包括主板、创业板、科创板cfg成分股,该板块的成分股roeROEzgb总股本(股)ltgb流通股本(股)ltsz流通市值(元)

    2022年4月10日
    289
  • id门禁卡复制到手机_门禁卡复制到手机苹果

    id门禁卡复制到手机_门禁卡复制到手机苹果大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。门禁卡复制到苹果手机的步骤如下:1、首先读取卡的ID,并安装“NFCTagInfo”,打开手机的NFC设置,门禁卡贴到手机后盖NFC部分,“NFCTagInfo”读取校园卡ID。可以看到“我的卡”ID号码。2、其次修改手机NFC的ID。随即打开R.E.管理器,根目录etc,找到etc文件夹中的“libnfc-nxp.conf”…

    2022年6月10日
    176
  • Java判断对象是否为空的方法:isEmpty,null,” “

    Java判断对象是否为空的方法:isEmpty,null,” “今天修改辞职同事遗留的代码才发现这个问题,不能用isEmpty来判断一个对象是否为null,之前没在意这个问题,在报了空指针之后才发现这个问题。查了一下关于判断为空的几个方法的区别,这里做一个简单的总结:null一个对象如果有可能是null的话,首先要做的就是判断是否为null:object==null,否则就有可能会出现空指针异常,这个通常是我们在进行数据库的查询操作时,查询结果首…

    2022年6月13日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号