Compaction
SinceVersion 1.2.2
Vertical compaction 是 Doris 1.2.2 版本中实现的新的 Compaction 算法,用于解决大宽表场景下的 Compaction 执行效率和资源开销问题。可以有效降低Compaction的内存开销,并提升 Compaction 的执行速度。 实际测试中,Vertical compaction 使用内存仅为原有compaction算法的1/10,同时compaction速率提升15%。
开启和配置方法(BE 配置):
- 可以开启该功能
- 每个列组包含的列个数,经测试,默认5列一组compaction的效率及内存使用较友好
Segment compaction
Segment compaction 主要应对单批次大数据量的导入场景。和 Vertical compaction 的触发机制不同,Segment compaction 是在导入过程中,针对一批次数据内,多个 Segment 进行的合并操作。这种机制可以有效减少最终生成的 Segment 数量,避免 -238 (OLAP_ERR_TOO_MANY_SEGMENTS)错误的出现。 Segmetn compaction 有以下特点:
- 可以减少导入产生的 segment 数量
- 合并过程与导入过程并行,不会额外增加导入时间
- 导入过程中的内存和计算资源的使用量会有增加,但因为平摊在整个导入过程中所以涨幅较低
- 经过 Segment compaction 后的数据在进行后续查询以及标准 compaction 时会有资源和性能上的优势
- 用于配置合并的间隔。默认 10 表示每生成 10 个 segment 文件将会进行一次 segment compaction。一般设置为 10 - 30,过大的值会增加 segment compaction 的内存用量。
如有以下场景或问题,建议开启此功能:
- 导入大量数据触发 OLAP_ERR_TOO_MANY_SEGMENTS (errcode -238) 错误导致导入失败。此时建议打开 segment compaction 的功能,在导入过程中对 segment 进行合并控制最终的数量。
- 导入过程中产生大量的小文件:虽然导入数据量不大,但因为低基数数据,或因为内存紧张触发 memtable 提前下刷,产生大量小 segment 文件也可能会触发 OLAP_ERR_TOO_MANY_SEGMENTS 导致导入失败。此时建议打开该功能。
- 导入大量数据后立即进行查询:刚导入完成、标准 compaction 还没有完成工作时,此时 segment 文件过多会影响后续查询效率。如果用户有导入后立即查询的需求,建议打开该功能。
不建议使用的情况:
- 导入操作本身已经耗尽了内存资源时,不建议使用 segment compaction 以免进一步增加内存压力使导入失败。