OB的数据表负载似乎不够均衡,请问如何手动调整指定数据表的主副本所在Zone?

【 使用环境 】测试环境 OceanBase_CE_V4.2.1.7

众所周知,OceanBase 中各个数据表的 主副本 会在 3个 Zone 之间随机均衡分布。

不过,经过我们一段时间的观测发现,Zone2 中有几个数据表(假设为 table_1table_2table_3)的 读写相对比较频繁,导致 Zone2 的 CPU负载 是其他两个 Zone 的 3倍以上。

请问,有什么办法可以将 指定数据表 的 主副本 手动转移到另外2个 Zone 上去吗?

你好 ob有transfer功能 ,可以实现你的需求您可以参考一下
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001050184

1 个赞

好的,非常感谢~

我自己也想到了另外一种办法:

  1. 先创建一个 表组,将随意两个 Zone1 的表加进去。
  2. 再将 Zone2 上需要迁移到 Zone1 的表也加进去。

等到下一次数据负载均衡时,OB 就会将 Zone2 上的指定表 迁移到 Zone 1。完成之后 再把 表组 清理掉。

再次表示感谢~

这个我到没想到,您可以试试,如果ok 那最好了

我已经执行过了,数据表已经迁移过来了。

当然,您的方案才是官方提供的正规操作。

非常感谢您的热心回复!

不客气 ,有问题随时沟通,互相学习

我建立了3个表组,按照 业务关联程度 以及 业务负载,将不同的表分为了3组。
这 3个表组 的 数据表 主副本 各自分布在一个单独的 Zone。

观察了几天,发现3个Zone的CPU负载相对均衡了不少。

但是,今天又发现,OceanBase 自动负载均衡,把这3个表组的 主副本 全部都自动迁移到了 同一个 Zone。

导致这个 Zone 的 CPU负载 比其他 2个 Zone的负载高了3倍以上,并触发了 load 负载超限的告警( 负载主要来自于 查询 )。

不知道 OceanBase 的 自动负载均衡 是怎么一个算法,为什么自动负载均衡后,负载反而更不均匀了呢

我只能自己通过 enable_transfer = false 来禁用 OB 的自动迁移么 ?关闭该配置之后,如果某个 Zone 发生故障,该 Zone 的主副本,OB 还会进行自动故障转移,以保证服务可用么 ?