适用版本
OceanBase 数据库 V4.2.0 及之后版本。
问题现象
集群部署规模为 4-4-4,扩容到 6-6-6 之后,发现资源未被打散,通过如下 SQL 查看对应的日志流,发现新加的机器上有两个日志流,其余机器只有一个。
obclient> select svr_ip,count(*) from cdb_ob_ls_locations where role='LEADER' and ls_id>1 and tennat_id=xxx group by svr_ip;
日志流回收后通过如下 SQL 查看表主分区所在位置分布发现新加的机器上只有少量分区,远远小于原来机器上的分区数量。
obclient> select tenant_id, zone, svr_ip, count(*) from cdb_ob_table_locations where table_type = 'user table' group by tenant_id, zone, svr_ip;
问题原因
分区均衡调度均衡由配置项 partition_balance_schedule_interval 控制,该配置项默认为 2h,所以默认情况下两小时内分区会达到均衡。
| 属性 | 描述 |
|---|---|
| 参数类型 | TIME |
| 默认值 | 2h |
| 取值范围 | [0s,+∞) 取值为 0s 时,表示关闭分区级负载均衡。 |
| 是否重启 OBServer 节点生效 | 否 |
关于该配置项说明:
该配置项从 V4.2.0 版本开始引入,partition_balance_schedule_interval = 0 的时候表示分区级负载均衡。当需要每天定时去做的时候,可以将该参数设置为 0,超过 24h 以后,等到需要每天定时调度的时间再配置该参数为 24h,就可以保证每天定时调度该任务了。
解决方法
调整分区均衡调度周期配置项 partition_balance_schedule_interval,默认为 2h,调整为 20s。
---用户租户下仅修改本租户的配置项信息:
obclient> alter system set partition_balance_schedule_interval = '20s';
---系统租户下可修改任意租户的配置项信息:
obclient> alter system set partition_balance_schedule_interval = '1h' tenant = all;
obclient> alter system set partition_balance_schedule_interval = '20s' tenant = 'tenant_name';