纯列存模式写入更新性能是不是比行列混合要差一些

背景:
有个表在ob上是纯列存,搞成了分区表,从tidb上同步增量数据,通过tidb的ticdc
同步到ob,发现业务高峰期是有延迟的,observer 这边cpu 可以到80%左右,我在想有没有可能
纯列存模式,写入更新性能 比行列混合要差一些呢,想把表结构改为行列混存试下,不知道其它老师有没有遇到这方面问题的?
列存转行列混存可以在线修改吗

2 个赞

@论坛小助手

2 个赞

纯列存模式写入更新性能是否比行列混合要差

根据文档库中的信息,纯列存模式的表确实可能在处理大量更新操作时表现出较低的性能。这主要是因为列存表的设计更偏向于读取优化,尤其是针对分析型查询(AP),而对于事务处理(TP)场景下的频繁增删改操作,行存模式更为高效。

  • 从列存支持更新吗,以及 MemTable 里的结构是怎样的?文档片段可以了解到,OceanBase 在执行增删改操作时,会先在内存中以行存形式记录这些变更(即保存在MemTable里)。如果存在大量的更新,并且没有及时合并到基线数据中,则会对查询性能产生影响。这意味着对于需要频繁进行更新操作的业务来说,纯列存表可能不是最佳选择。
  • 另外,在行存转列存操作支持异步 Online DDL的部分提到,V4.3.5版本开始支持了将行存表异步转换为列存或行列混存表的Online DDL特性,允许用户实时修改表的存储格式而不必担心阻塞数据写入。

列存表转为行列混存

您提到想要尝试将现有的纯列存表改为行列混存表以改善写入和更新性能的问题。确实,采用行列混存的方式可以在一定程度上缓解这一问题,因为这样的设计能够同时兼顾TP与AP两种类型的工作负载。对于您的场景,如果既有高频次的小规模更新也有大规模的数据分析需求,那么使用行列冗余表是一个不错的选择。

是否支持在线修改表结构

根据性能提升 → 行存转列存操作支持异步 Online DDL,自V4.3.5起,OceanBase已经支持了行存表异步转换为列存表或行列混存表的功能。因此,您可以利用该功能实现不中断服务的情况下更改现有表的存储方式。具体做法是在执行DDL语句时添加delayed关键字,这样就可以即时调整Schema设置而不会阻塞正在进行的数据写入活动。

总之,基于以上信息,改变表的存储模式至行列混存来应对当前遇到的性能瓶颈是一个可行的方案,而且可以通过在线DDL完成此操作,减少了对生产环境的影响。希望这对您有所帮助!

详情请参考:

  1. 列存 FAQ
  2. 行列混存
  3. What’s New
  4. row_compaction_update_limit
  5. V$OB_TABLET_COMPACTION_HISTORY
  6. 优化日志同步性能
  7. GV$OB_TABLET_COMPACTION_HISTORY
1 个赞