ob 怎么打散热点呢

背景:
我们公司基本上大表和重要的表都是分区表,按天分区或者按月分区,如果说按天分区,按照ob的分区原则,岂不是每次写入数据都往1个分区里面写,或者说往1个zone 里面写,这样不就形成热点了?
这个时候 怎么打散热点呢

1 个赞

可以增加二级分区,从而将数据打散到不同的数据存储节点上。

1 个赞

@论坛小助手

1 个赞

根据您的背景信息,您担心的是在按天分区的表中,每天的数据写入可能会集中在单个分区或单个Zone上,从而形成热点问题。确实,在某些情况下,这种数据分布方式可能引发性能瓶颈。OceanBase 提供了几种方法来帮助打散热点,以下是一些推荐的方法:

1. 选择合适的分区键

  • 确保高区分度:选择一个能够很好地区分数据的字段作为分区键。例如,如果您按天分区,但仍然存在大量并发写入的情况,可以考虑使用哈希(HASH)分区策略进一步打散热点。
  • 使用组合分区:对于非常大的表,可以考虑采用二级分区策略,即结合RANGE和HASH等分区方式,先通过时间维度进行范围分区,再通过哈希值将数据均匀分布到不同的子分区上。

2. 调整分区策略

  • 避免单一时间字段分区:如果仅依赖于某个时间字段进行分区(如日期),确实可能导致短时间内大量数据集中写入某一特定分区。这时可以通过引入其他字段共同参与分区键计算(比如用户ID、订单ID等),以提高数据分散度。
  • 定期增加新分区:对RANGE类型的分区表来说,建议业务方自行管理分区,比如每日自动添加一个新的分区,这样可以保证新增数据不会全部落入现有最后一个分区中,有助于缓解写入热点现象。

3. 利用表组特性

  • 自适应表组 (ADAPTIVE):创建表时将其加入设置了SHARDING='ADAPTIVE'属性的表组内,可以让系统根据实际情况智能地将不同表的数据分散开来。具体可参考文档片段5与文档片段6中的说明。

4. 监控与调整

  • 持续监控:利用OCP或其他监控工具密切跟踪各分区及节点的负载情况,一旦发现某一分区成为热点,则应及时采取措施重新平衡数据分布。
  • 手动迁移Unit:当检测到某个OB节点上的某个或某些分区变得异常繁忙时,可以考虑通过OCP界面或命令行手动迁移相关Unit至其他较为空闲的节点,详见文档片段7关于如何处理节点磁盘空间满的问题章节中提到的手动迁移步骤。

以上就是针对您提出的问题关于如何在OceanBase中有效避免热点问题的一些建议。希望这些建议能对您有所帮助!如果有更具体的技术细节需要讨论,欢迎继续提问。

详情请参考:

  1. 租户内均衡
  2. 使用 OceanBase 数据库分区表进行水平拆分
  3. 数据分布
  4. oceanbase.DBA_OB_TABLEGROUP_TABLES
  5. 节点数据盘空间满
  6. 分区概述
1 个赞

二级分区,又要搞个分区键吧