首批通过分布式安全可靠测评,为关键业务系统打造
将已有的表添加到 tablegroup 后没有均衡的原因和解决方法
更新时间:2024-07-25 09:46
问题描述
未创建 tablegroup 前通过视图 dba_ob_table_locations 查看表组中对应表 leader 的分布情况。
select table_name,svr_ip from oceanbase.dba_ob_table_locations where table_name in ('xxx','yyy') and role='leader';

创建 tablegroup 并把已有的表添加到同一个 tablegroup 中。
CREATE TABLEGROUP test_tg1 SHARDING = 'NONE';
alter table xxx tablegroup='test_tg1';
alter table yyy tablegroup='test_tg1';

多次确认后对应的表的 leader 还是在不同的节点上。

适用版本
OceanBase 数据库 V4.2.0 及之后版本。
问题原因
确认一下对应的用户租户的 partition_balance_schedule_interval 参数,默认为 2h,需要等这个时间到了后才会均衡,可以调小对应的值让早点触发均衡。
解决方法
确认对应租户的
partition_balance_schedule_interval当前值。select * from gv$ob_parameters where name='partition_balance_schedule_interval' and tenant_id=xxx;调小对应租户的
partition_balance_schedule_interval当前值。## 在 sys 租户中执行 alter system set partition_balance_schedule_interval='2m' tenant='xxx'; ## 或者用户自己的租户中执行 alter system set partition_balance_schedule_interval='2m'; ## 或者 OCP 白屏在对应用户租户下修改。调整
partition_balance_schedule_interval当前值之后,通过视图dba_ob_table_locations查看表组中对应表 leader 的分布情况。
如上所示 2 张表的 leader 在同一个节点上了。
注意
在 OceanBase 数据库 V4.2.4 及之后版本中使用手动触发命令。详细介绍,参见 手动触发分区均衡。