oceanbase 4.4.2版本major compaction优化探索

oceanbase 4.4.2版本major compaction方案:每日凌晨触发一次 vs 冻结次数达到阈值自动触发,帮我评估一下两种方案的优缺点,并给出配置方式

@论坛小助手

8 个赞

@论坛小助手

1 个赞

OceanBase 4.4.2版本Major Compaction优化探索

两种方案的优缺点评估

根据您提出的需求,OceanBase提供了两种主要的方式来触发Major Compaction(合并):每日凌晨自动触发一次和当冻结次数达到特定阈值时自动触发。这两种方式各有优势与劣势,具体如下:

每日凌晨触发一次

  • 优点

    • 确定性高:可以确保每天都有一次全局的数据合并操作,这对于保证数据的一致性和性能有一定的帮助。
    • 易于规划:管理员可以根据业务低峰期来安排此操作,以减少对在线业务的影响。
  • 缺点

    • 缺乏灵活性:如果某天没有足够的写入活动导致需要合并的数据量较少,那么进行合并可能是不必要的,这可能会浪费系统资源。
    • 可能增加延迟:如果凌晨恰好是某些特殊业务场景下的高峰期,则此时执行合并可能会影响业务运行。

冻结次数达到阈值后自动触发

  • 优点

    • 更高效:只有当实际需要时才触发合并,避免了频繁或不必要的合并动作,从而节省了系统资源。
    • 自适应性强:能够根据实际负载动态调整,对于读写比例较高的环境更加友好。
  • 缺点

    • 难以预测:无法精确知道何时会发生合并,这给运维工作带来了不确定性。
    • 可控性较低:如果设定的阈值不合理,可能会在不合适的时间点触发合并。

配置方式

针对上述两种方案,在OceanBase 4.4.2版本中,您可以使用租户级别的配置项major_compact_trigger来进行设置。该参数用于控制转储多少次后会触发一次Major Compaction。关于major_compact_trigger的具体说明,请参考文档片段1: minor_freeze_times(尽管标题提到的是minor_freeze_times,但内容中提到了如何通过major_compact_trigger来代替旧版本中的minor_freeze_times功能)。

  • 若选择按日定时触发:

    • 不直接支持固定时间触发合并,但可以通过外部调度工具如cron作业来实现定时执行MAJOR FREEZE命令的方式间接达到目的。详情请见文档片段3: 手动控制合并
  • 若选择按冻结次数触发:

    • 设置major_compact_trigger为你期望的值即可。例如,如果你希望每累积100次转储后触发一次合并,那么就将major_compact_trigger设为100。设置方法通常是在创建租户时指定或者后续通过修改租户配置来完成。

结论

综上所述,选择哪种方案取决于您的具体需求以及系统的工作负载特性。如果您更倾向于稳定性和可预见性,推荐采用每日凌晨定时触发的方式;若您追求更高的效率及自适应能力,则依据冻结次数触发可能更为合适。无论采取哪种策略,都建议密切关注系统性能变化,并据此做出相应调整。

详情请参考:

  1. minor_freeze_times
  2. 合并管理概述
  3. 手动控制合并
  4. 4000 ~ 4499
  5. 存储架构概述
  6. global_major_freeze_residual_memory
  7. 触发器
  8. 概述
  9. minor_merge_concurrency
4 个赞

这个确实需要具体问题具体分析,跟业务量和业务形式有关系吧

3 个赞

先赞后看

2 个赞

学习了学习一下

1 个赞

不管咋样 总是可能遇到问题。没有一种业务是有一定的完全性规律性

2 个赞

如果是怕业务任务失败那不简单,等结束了或自行停了再弄,毕竟业务更重要

1 个赞

学习

1 个赞

两种模式的选择应该还是取决于业务特性,我们目前是定时

结合起来。

对于compact问题,除了文中提到的方法,还可以考虑freeze和minor的结合使用。

这篇文章对oceanbas的讲解非常到位。

干货满满,收藏起来慢慢消化。

1 个赞
  • 每日合并还是比较好的,避免白天业务高峰时间段突然触发合并;同时也可以根据自己的业务特性安排每日合并的时间,避开凌晨跑批的业务。
  • 也可以根据租户的业务特性,不同的租户安排不同的合并时间(OceanBase 3.X是集群级别的合并,没办法这样操作)
1 个赞

学习

打卡打卡

4.6版本有窗口合并,这个特性应该挺好用的

有的业务不能停,比如说安全类业务,要随时能响应,黑客就喜欢挑你脆弱的时候搞事情