首批通过分布式安全可靠测评,为关键业务系统打造
后台任务的资源隔离配置案例
更新时间:2026-06-18 15:35:53
当前 OceanBase 数据库的内核有十几种资源请求类型,包括前台任务及后台任务,而大部分后台任务的优先级并不是特别高,因此,需要对这些后台任务资源进行资源隔离,并默认开启资源隔离。
由于 配置租户内资源隔离 中通过自由配置后台任务的资源隔离的配置方法比较复杂,本节通过将资源请求类型进行分组的方式,为后台任务的资源隔离提供一个推荐的配置方法。
资源请求类型分组
由于当前资源隔离的配置方式比较复杂,为了简化配置,可以将这些资源请求类型进行分组,总体可以分为以下资源组:
- clog 日志提交资源组:CLOG_HIGH_GROUP
- 转储资源组:COMPACTION_HIGH_GROUP
- 后台任务资源组:BACKGROUND_GROUP
上述各资源组中包含的资源请求类型如下表所示。有关各资源请求类型(后台任务)对应的详细说明,参见 资源隔离概述。
| 资源组 | 包含的资源请求类型 |
|---|---|
| CLOG_HIGH_GROUP | CLOG_HIGH |
| COMPACTION_HIGH_GROUP | COMPACTION_HIGH |
| BACKGROUND_GROUP |
|
资源隔离策略
根据分组情况,可以为这些资源组规划资源隔离策略。推荐的资源隔离策略如下。
| 资源组 | MIN_IOPS | MAX_IOPS | IOPS_WEIGHT | MAX_CPU | CPU_WEIGHT |
|---|---|---|---|---|---|
| CLOG_HIGH_GROUP | 40 | 100 | 100 | 100 | 30 |
| COMPACTION_HIGH_GROUP | 30 | 100 | 50 | 100 | 70 |
| BACKGROUND_GROUP | 10 | 100 | 30 | 100 | 70 |
说明
由于后台任务 CLOG_HIGH 会直接影响业务请求的延迟,对 I/O 请求的要求应尽量得到满足,因此将资源组 CLOG_HIGH_GROUP 中的 MIN_IOPS 配置为 40;同时该任务对 CPU 的要求不高,故将 CPU_WEIGHT 配置为 30。
配置后台任务的资源隔离
前提条件
由于 CPU 的资源隔离依赖 cgroup,如果需要控制 CPU 的资源隔离,则在配置后台任务的资源隔离前,必须配置 cgroup 目录并开启 cgroup 功能。
配置 cgroup 目录并开启 cgroup 功能的相关操作,参见 配置 cgroup。
(可选)配置后台任务的资源隔离前,可以进行磁盘性能校准,并配置租户 Unit 的 IOPS。
说明
在当前版本中,CPU 和 IOPS 资源隔离均不再强依赖磁盘性能校准操作。
使用
root用户登录到集群的sys租户。执行磁盘性能校准。
执行以下命令,触发磁盘校准任务。
obclient> ALTER SYSTEM RUN JOB "io_calibration";语句执行成功后,执行以下命令,查看校准进度。
obclient> SELECT * FROM oceanbase.GV$OB_IO_CALIBRATION_STATUS;校准完成到生效可能需要 1~2 分钟,待生效后,执行以下命令,查看校准值。
obclient> SELECT * FROM oceanbase.GV$OB_IO_BENCHMARK;
配置租户 Unit 的 IOPS。根据上一步中所查询的 OBServer 节点上的磁盘校准值,使用 16 KB 读的磁盘校准值作为该节点 IOPS 设置的上限值。
有关租户 Unit 的 IOPS 的详细配置及说明,参见 配置租户内资源隔离 中 将租户的 MAX_IOPS 和 MIN_IOPS 配置为有效值 的内容。
操作步骤
用户租户的租户管理员登录集群的 MySQL 租户或 Oracle 租户。
执行以下 SQL,以配置后台任务的资源隔离。
/*创建 plan*/ CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN('GLOBAL_PLAN','plan for global'); /*创建资源组 COMPACTION_HIGH_GROUP*/ CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'COMPACTION_HIGH_GROUP', COMMENT => 'COMPACTION_HIGH_GROUP'); CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'GLOBAL_PLAN', GROUP_OR_SUBPLAN => 'COMPACTION_HIGH_GROUP' , COMMENT => 'COMPACTION_HIGH_GROUP', MAX_IOPS => 100, MIN_IOPS => 30, WEIGHT_IOPS => 50,UTILIZATION_LIMIT => 100, MGMT_P1 => 70); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_HIGH', 'COMPACTION_HIGH_GROUP'); /*创建资源组 CLOG_HIGH_GROUP*/ CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'CLOG_HIGH_GROUP', COMMENT => 'CLOG_HIGH_GROUP'); CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'GLOBAL_PLAN', GROUP_OR_SUBPLAN => 'CLOG_HIGH_GROUP' , COMMENT => 'CLOG_HIGH_GROUP', MAX_IOPS => 100, MIN_IOPS => 40, WEIGHT_IOPS => 100, UTILIZATION_LIMIT => 100, MGMT_P1 => 30); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'CLOG_HIGH', 'CLOG_HIGH_GROUP'); /*创建资源组 BACKGROUND_GROUP*/ CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'BACKGROUND_GROUP', COMMENT => 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'GLOBAL_PLAN', GROUP_OR_SUBPLAN => 'BACKGROUND_GROUP' , COMMENT => 'BACKGROUND_GROUP', MAX_IOPS => 100, MIN_IOPS => 10, WEIGHT_IOPS => 30, UTILIZATION_LIMIT => 100, MGMT_P1 => 70); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_LOW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_MID', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_LOW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_MID', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_HIGH', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'DDL', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'DDL_HIGH', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'CLOG_LOW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'CLOG_MID', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'OPT_STATS', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'GC_MACRO_BLOCK', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'IMPORT', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'SQL_AUDIT', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'MVIEW', 'BACKGROUND_GROUP'); CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'REPLAY_HIGH', 'BACKGROUND_GROUP'); /*使 plan 生效*/ SET GLOBAL resource_manager_plan = 'GLOBAL_PLAN';
相关文档
本节仅提供了后台任务资源隔离的推荐配置方法,租户内其他类型的隔离配置,参考以下文档进行配置: