首批通过分布式安全可靠测评,为关键业务系统打造
配置定时分区均衡任务
更新时间:2026-04-08 18:11:13
OceanBase 数据库在创建用户租户时,系统内置了定时分区均衡任务 SCHEDULED_TRIGGER_PARTITION_BALANCE,默认每日的 00:00 触发一次分区均衡。用户可以通过 DBMS_SCHEDULER 系统包的子程序来设置定时分区均衡任务的各项参数。
使用限制
系统租户(sys 租户)下不支持配置定时分区均衡任务。
开启定时分区均衡任务
对于当前版本新建的用户租户,默认定时分区均衡任务即为开启状态,不需要再重新启用。对于从 V4.2.3 及之前版本升级至当前版本的用户租户,默认定时分区均衡任务为关闭状态,用户可以参考以下操作开启定时分区均衡任务。
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A确认租户级配置项
partition_balance_schedule_interval的值是否为0s。开启定时分区均衡任务
SCHEDULED_TRIGGER_PARTITION_BALANCE前,需要确保未开启自动触发分区均衡任务,即要求租户级配置项partition_balance_schedule_interval的值为0。查看租户级配置项
partition_balance_schedule_interval是否为0s,如果不为0s,将其值设置为0s,语句如下。obclient> SHOW PARAMETERS LIKE '%partition_balance_schedule_interval%';obclient> ALTER SYSTEM SET partition_balance_schedule_interval='0s';调用
DBMS_SCHEDULER系统包的ENABLE子程序,启用定时分区均衡任务SCHEDULED_TRIGGER_PARTITION_BALANCE。MySQL 模式Oracle 模式MySQL 模式租户启用定时分区均衡任务的示例如下:
obclient [oceanbase]> CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');Oracle 模式租户启用定时分区均衡任务的示例如下:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.ENABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE'); END;//obclient [SYS]> DELIMITER ;有关
ENABLE子程序的详细说明,参见 ENABLE。
关闭定时分区均衡任务
对于当前版本新建的用户租户,默认定时分区均衡任务即为开启状态,用户也可以根据业务需要,禁用定时分区均衡任务。禁用定时分区均衡任务后,用户还可以通过自动触发(将配置项 partition_balance_schedule_interval 设置为大于 0s 的值)或手动触发方式来发起分区均衡任务。
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A调用
DBMS_SCHEDULER系统包的DISABLE子程序,禁用定时分区均衡任务SCHEDULED_TRIGGER_PARTITION_BALANCE。MySQL 模式Oracle 模式MySQL 模式租户禁用定时分区均衡任务的示例如下:
obclient [oceanbase]> CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');Oracle 模式租户禁用定时分区均衡任务的示例如下:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.DISABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE'); END;//obclient [SYS]> DELIMITER ;有关
DISABLE子程序的详细说明,参见 DISABLE。
调整定时分区均衡任务的调度时间
开启定时分区均衡任务后,系统默认在每天的 00:00 触发分区均衡,用户可以根据需要进行修改。
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A调用
DBMS_SCHEDULER系统包的SET_ATTRIBUTE子程序,调整分区均衡任务的下次调度时间。例如,调整为下次 01:00 触发分区均衡。MySQL 模式Oracle 模式MySQL 模式租户将定时分区均衡任务的执行时间调整为
2024-06-12 01:00:00的示例如下:obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'NEXT_DATE', '2024-06-12 01:00:00');Oracle 模式租户将定时分区均衡任务的执行时间调整为
12-Jun-2024 01:00:00的示例如下:obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'NEXT_DATE', '12-Jun-2024 01:00:00'); END;//obclient [SYS]> DELIMITER ;有关
SET_ATTRIBUTE子程序的详细说明,参见 SET_ATTRIBUTE。
调整定时分区均衡任务的调度频率
默认定时分区均衡任务的调度频率为一天一次,用户可以根据需要进行修改。
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A调用
DBMS_SCHEDULER系统包的SET_ATTRIBUTE子程序,调整分区均衡任务的调度频率。例如,调整为每两天触发一次分区均衡。MySQL 模式Oracle 模式语句如下:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=str_value; INTERVAL=int_value');其中:
FREQ:用于指定调度频率的时间单位,支持的取值为MINUTELY(分钟)、HOURLY(小时)、DAILY(天)以及WEEKLY(周)。INTERVAL:用于指定具体数值,即每多少个单位时间触发一次任务。例如,FREQ=DAILY; INTERVAL=2表示每两天触发一次任务。
MySQL 模式租户将定时分区均衡任务的执行频率调整为每两天触发一次的示例如下:
obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=DAILY; INTERVAL=2');语句如下:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=str_value; INTERVAL=int_value'); END;其中:
FREQ:用于指定调度频率的时间单位,支持的取值为MINUTELY(分钟)、HOURLY(小时)、DAILY(天)以及WEEKLY(周)。INTERVAL:用于指定具体数值,即每多少个单位时间触发一次任务。例如,FREQ=DAILY; INTERVAL=2表示每两天触发一次任务。
Oracle 模式租户将定时分区均衡任务的执行频率调整为每两天触发一次的示例如下:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=DAILY; INTERVAL=2'); END;//obclient [SYS]> DELIMITER ;有关
SET_ATTRIBUTE子程序的详细说明,参见 SET_ATTRIBUTE。
调整定时分区均衡任务单次任务执行的超时时间
默认定时分区均衡任务单次任务的执行无超时时间限制,用户需要根据业务实际情况进行修改。
由于调整定时分区均衡任务单次任务执行的超时时间实际上调整的是所有通过调用 TRIGGER_PARTITION_BALANCE 子程序而触发的后台分区均衡任务的执行超时时间,故调整该值同时也会影响通过手动方式触发的分区均衡任务。有关手动触发分区均衡的详细操作,参见 手动触发分区均衡任务。
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A调用
DBMS_SCHEDULER系统包的SET_ATTRIBUTE子程序,调整单次任务执行的超时时间。MySQL 模式Oracle 模式语句如下:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout)');其中,
balance_timeout用于指定单次任务执行的超时时间,单位为秒。如果该值为空,则表示后台均衡任务无超时时间。MySQL 模式租户将单次任务执行的超时时间调整为 7200 秒的示例如下:
obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200)');语句如下:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout)'); END;其中,
balance_timeout用于指定单次任务执行的超时时间,单位为秒。如果该值为空,则表示后台均衡任务无超时时间。Oracle 模式租户将单次任务执行的超时时间调整为 7200 秒的示例如下:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200)'); END;//obclient [SYS]> DELIMITER ;有关
SET_ATTRIBUTE子程序的详细说明,参见 SET_ATTRIBUTE。
调整触发分区均衡语句的最大执行时间
默认触发分区均衡语句的最大执行时间为 7200 秒,即 2 小时,不建议修改该值。
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A调用
DBMS_SCHEDULER系统包的SET_ATTRIBUTE子程序,调整触发分区均衡语句的最大执行时间。MySQL 模式Oracle 模式语句如下:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', 'max_time');其中,
max_time用于指定触发分区均衡语句的最大执行时间,单位为秒。MySQL 模式租户将分区均衡语句的最大执行时间调整为 3600 秒(1小时)的示例如下:
obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', '3600');语句如下:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', 'max_time'); END;其中,
max_time用于指定触发分区均衡语句的最大执行时间,单位为秒。Oracle 模式租户将分区均衡语句的最大执行时间调整为 3600 秒(1小时)的示例如下:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', '3600'); END;//obclient [SYS]> DELIMITER ;有关
SET_ATTRIBUTE子程序的详细说明,参见 SET_ATTRIBUTE。
后续操作
定时任务仅用于触发分区均衡任务,当达到触发条件时系统会自动触发分区均衡任务。触发分区均衡任务后:
可以通过视图查看定时分区均衡任务的触发历史,具体操作参见 查看定时分区均衡任务的触发历史。
实际的分区转移将由后台均衡任务异步执行,可以通过视图查看分区均衡任务的执行过程,具体操作参见 查看后台的分区均衡任务。
说明
成功触发分区均衡任务后,如果租户级配置项
enable_rebalance和enable_transfer的值有一个不为True,则该定时任务会执行失败。