OceanBase
  • 产品
  • 解决方案
  • 客户
  • 合作伙伴
  • 资源与服务
  • 文档
  • 社区
云控制台登录 / 注册
  • 免费试用
本地部署
OceanBase 分布式数据库

首批通过分布式安全可靠测评,为关键业务系统打造

OceanBase 集中式数据库

集中式架构,兼具性能与成本优势的集中式数据库

OceanBase 社区版

兼容 MySQL 的单机分布式一体化开源数据库

OceanBase seekdb

为现代 AI 应用打造的开源混合搜索数据库

云上部署
OB Cloud

一体化云数据库,打造面向多云的一致性体验

一体机
OceanBase 数据库一体机

软硬一体,提供极致性能与高可靠性保障

OceanBase AI 一体机

基于 OceanBase AI Stack 的智能一体机

工具
迁移评估工具(OMA)
数据迁移工具(OMS)
开发者工具(ODC)
运维管理工具(OCP)
自治服务工具(OAS)
一体化关键能力
TP 事务处理

面向关键业务负载的事务处理能力,保障大规模业务稳定运行与数据零丢失

AP 实时分析

原生支持事务与分析融合,低延迟洞察业务数据,驱动智能决策与敏捷运营

AI 现代负载

湖库一体管理多模态数据离在线处理,AI 原生支撑 Agent 规模化应用

oceanbase白皮书

OceanBase 一体化分布式数据库

通用场景
全场景业务系统 OLTP
实时分析混合负载
异地多活
多基础设施部署
一站式传统数据库升级
混合云部署
一库多芯软硬件混合部署
分布式数据库单机部署
大存储类数据库降本
冷数据归档降本
多实例资源整合
分库分表一体化升级
高并发场景
数据中台
行业解决方案
国有大行和股份制银行核心系统解决方案
区域性银行核心系统解决方案
寿险核心系统解决方案
产险核心系统解决方案
资管交易类系统解决方案
资管 TA 清算类系统解决方案
运营商核心系统解决方案
人社核心系统解决方案
电力核心系统解决方案
行业专区
银行专区

助力银行完成各类核心业务系统升级

保险专区

寿险、产险核心系统升级的更佳选择

零售专区

助力200+零售行业客户规模化落地

DB 大咖说
oceanbase爱奇艺

百亿级卡券业务的“单库双擎”架构升级

oceanbase四川银行

800个测试用例选定分布式数据库

oceanbase太平洋保险

先难后易,核心系统数据库升级复盘

行业案例
oceanbase交通银行

核心数据库的“分布式革命”

oceanbase中国移动

B域核心CRM&BOSS近乎零改造分布式升级

oceanbase理想

打造领先的智能制造系统和自动驾驶体验

演讲实录
oceanbase中国联通

集团应用分布式数据库覆盖B/O/M域

oceanbase国泰海通

智能推送系统稳定支撑单日亿级消息处理量

oceanbase中国联合航空

中国首款机票盲盒背后的数据库力量

用户实践
oceanbase北京银行

最快速度完成40余套系统国产数据库升级

oceanbase维沃移动通信有限公司

替换 MySQL 分库分表,探索成本效益最优

oceanbase滴滴

数据库大规模运维体系建设及落地实践

合作伙伴
合作伙伴类型
联合解决方案
产业生态伙伴
经销商伙伴
技术服务伙伴
培训认证伙伴
生态联合解决方案
神州信息 x OceanBase 银行核心系统
长亮科技 x OceanBase 新核心系统
中电金信 x OceanBase 金融分布式核心系统
天阳科技 x OceanBase 贷记卡方案
易诚互动 x OceanBase 手机银行方案
恒生 x OceanBase UF3.0/O45/TA/估值方案
商业发行版
云树®数据库软件 ActionDB
服务
支持与服务
提交工单
软件下载
OceanBase 企业版
OceanBase 社区版
OB Cloud
学习
培训与认证
在线课堂
在线体验
开发者
开发者中心
资料
行业报告与白皮书
官方博客
年度发布会资料
开发者大会资料
oceanbase白皮书

金融核心系统数据库升级路径与场景实践

oceanbase白皮书

人社关键业务数据库一体化升级实践

产品文档
oceanbaseOceanBase 数据库
驱动和中间件
oceanbaseOB Cloud 云数据库
工具与组件
oceanbaseOceanBase 数据库一体机
生态商业产品
快速上手
OceanBase 数据库
OB Cloud 云数据库
知识库
汇聚常见产品使用问题案例
在线体验

Demo与实验,感受 OceanBase 的核心能力与应用场景

OceanBase 最佳实践
了解 OceanBase 分布式数据库的架构与系统原理
技术博客

技术解析 | 用户实践 | 社区月报

在线课堂

电子书 |视频课程|在线培训

Developer Hub
应用开发Demo | 数据开发与集成工具
问答论坛

快速答疑 | 常见问题 | 技术交流

社区活动

Meetup | 技术公开课

GitHub

查看源码 | 贡献代码 | 建议反馈

加入社区

社区组织 | 社区用户贡献 |开发者贡献

进入社区首页
oceanbase数据库大赛

第五届OceanBase数据库大赛

oceanbase免费课程
从故障处理到性能调优:OceanBase资深DBA进阶培训
切换语言
  • 中文站 - 简体中文
  • International - English
  • 日本站 - 日本語
文档反馈
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.3.5
  5. 管理数据库
  6. 租户管理
  7. 租户常见操作
  8. 资源隔离
  9. 资源隔离管理(Oracle 模式)
  10. 配置租户内资源隔离
分布式版-V4.3.5LTS
  • V4.3.5 文档更新记录
  • What's New
  • 简介
  • 快速上手
  • 应用开发
  • 部署
  • 升级
  • 数据迁移
  • 管理数据库
    • 登录 OceanBase 租户
    • 集群管理
    • 租户管理
      • 租户介绍
      • 租户容量
      • 租户类型
      • 用户租户介绍
      • 租户系统变量
      • 租户常见操作
        • 创建租户
        • 资源隔离
          • 资源隔离概述
          • 资源隔离管理(Oracle 模式)
            • 配置 cgroup
            • 使用全局 CPU 资源的前后台隔离
            • 磁盘性能校准
            • 配置租户内资源隔离
            • 更新资源管理计划内容
            • 删除资源管理计划内容
            • 删除资源管理计划
            • 删除资源组
            • 清除 cgroup 配置
          • 资源隔离管理(MySQL 模式)
          • 后台任务的资源隔离配置案例
        • 查看租户和资源信息
        • 查看和设置租户白名单
        • 查看租户系统变量
        • 修改租户系统变量
        • 租户扩缩容
        • 修改资源池属性
        • 修改租户属性
        • 租户锁定和解锁
        • 删除租户
        • 恢复租户
        • 重命名租户
        • 管理资源池
        • 管理资源规格
        • 管理服务
    • 副本管理
    • 高可用
    • 安全权限
    • 备份恢复
    • 监控指标
    • 日志
    • 性能调优
    • 日常巡检
    • 问题排查
    • 应急处理
  • AP
  • 向量搜索
  • 共享存储
  • 生态集成
  • 实践教程
  • 参考指南
  • 常见问题
  • 版本发布记录
  • 术语
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.3.5
  5. 管理数据库
  6. 租户管理
  7. 租户常见操作
  8. 资源隔离
  9. 资源隔离管理(Oracle 模式)
  10. 配置租户内资源隔离

配置租户内资源隔离

更新时间:2026-04-07 20:57:19

github-fill编辑
编组分享

本文主要介绍 Oracle 模式下资源隔离的配置方法。

前提条件

  • 开始配置资源隔离前,建议您先了解资源组、资源管理计划、资源管理计划内容等基础概念,资源隔离相关的基础概念及适用场景请参见 资源隔离概述。

  • 由于 CPU 的资源隔离依赖 cgroup,如果需要控制 CPU 的资源隔离,则在开始配置资源隔离前,必须配置 cgroup 目录并开启 cgroup 功能。配置 cgroup 目录并开启 cgroup 功能的相关操作可参见 配置 cgroup。

    配置 User 级资源隔离和 Function 级资源隔离时,如果不需要控制 CPU 的资源隔离(仅需要进行 IOPS 资源隔离),则不需要配置 cgroup;配置 SQL 级资源隔离时,无论是否需要控制 CPU 的资源隔离,均需要配置 cgroup。

  • 在进行 IOPS 资源隔离前,需要先进行磁盘性能校准,磁盘性能校准的相关操作请参见 磁盘性能校准。

    如果仅需要控制 CPU 的资源隔离,则不需要进行磁盘性能校准。

    说明

    对于 V4.3.5 版本,从 V4.3.5 BP2 版本开始,CPU 和 IOPS 资源隔离均不再强依赖磁盘性能校准操作。

  • 请确认已创建好需要进行资源隔离的用户。创建用户的详细操作请参见 创建用户。

  • 如果需要配置 SQL 级资源隔离,请确认已创建好需要进行资源隔离的数据库、表及列。

背景信息

资源隔离又分为 User 级资源隔离、SQL 级资源隔离以及 Function 级资源隔离三种。有关三种资源隔离的更详细说明请参见 资源隔离概述。

步骤一(可选):将租户的 MAX_IOPS 和 MIN_IOPS 配置为有效值

说明

如果您在创建租户所使用的 Unit 规格时,已将 MAX_IOPS 和 MIN_IOPS 设置为 16 KB 读对应的 IOPS 值,或者,您不需要控制 IOPS 的资源隔离,请忽略本步骤。

完成磁盘校准后,在配置资源隔离计划前,需要保证租户的资源规格中 MAX_IOPS 和 MIN_IOPS 的值为有效值,这里的有效值指的是以 16 KB 读对应的 IOPS 值作为租户 IOPS 配置的参考值。

  1. 使用 root 用户登录集群的 sys 租户。

  2. 执行以下命令,查看待进行资源隔离的租户的资源规格。

    obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;
    

    查询结果的示例如下:

    +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+---------------------+----------------------+
    | UNIT_CONFIG_ID | NAME            | CREATE_TIME                | MODIFY_TIME                | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS            | MIN_IOPS            | IOPS_WEIGHT | MAX_NET_BANDWIDTH   | NET_BANDWIDTH_WEIGHT |
    +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+---------------------+----------------------+
    |              1 | sys_unit_config | 2023-12-19 13:55:04.463295 | 2023-12-19 13:56:08.969718 |       3 |       3 |  2147483648 |    3221225472 | 9223372036854775807 | 9223372036854775807 |           3 | 9223372036854775807 |                    4 |
    |           1001 | small_unit      | 2023-12-19 13:56:09.851665 | 2023-12-19 13:56:09.851665 |       1 |       1 |  2147483648 |    6442450944 | 9223372036854775807 | 9223372036854775807 |           1 | 9223372036854775807 |                    2 |
    |           1002 | medium_unit     | 2023-12-19 13:56:10.030914 | 2023-12-19 13:56:10.030914 |       8 |       4 |  8589934592 |   25769803776 | 9223372036854775807 | 9223372036854775807 |           4 | 9223372036854775807 |                    2 |
    |           1003 | large_unit      | 2023-12-19 13:56:10.112115 | 2023-12-19 13:56:10.112115 |      16 |       8 | 21474836480 |   64424509440 | 9223372036854775807 | 9223372036854775807 |           8 | 9223372036854775807 |                    2 |
    +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+---------------------+----------------------+
    4 rows in set
    

    根据查询结果,如果该租户的 MAX_IOPS 和 MIN_IOPS 均为默认值 INT64_MAX(9223372036854775807),则需要对租户可使用的 IOPS 资源重新进行规划。

  3. 执行以下命令,确认租户部署在哪些 OBServer 节点上。

    obclient [oceanbase]> SELECT DISTINCT SVR_IP, SVR_PORT FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE tenant_id = xxxx;
    

    查询结果的示例如下:

    +----------------+----------+
    | SVR_IP         | SVR_PORT |
    +----------------+----------+
    | xx.xxx.xxx.xx1 |    xxxx1 |
    | xx.xxx.xxx.xx1 |    xxxx2 |
    | xx.xxx.xxx.xx1 |    xxxx3 |
    +----------------+----------+
    3 rows in set
    
  4. 执行以下命令,确认待进行资源隔离的租户所在的 OBServer 节点上的磁盘校准值,使用 16 KB 读的磁盘校准值作为该节点 IOPS 设置的上限值。

    obclient [oceanbase]> SELECT * FROM oceanbase.GV$OB_IO_BENCHMARK WHERE MODE='READ' AND SIZE=16384;
    

    查询结果的示例如下:

    +----------------+----------+--------------+------+-------+-------+------+---------+
    | SVR_IP         | SVR_PORT | STORAGE_NAME | MODE | SIZE  | IOPS  | MBPS | LATENCY |
    +----------------+----------+--------------+------+-------+-------+------+---------+
    | xx.xxx.xxx.xx1 |    xxxx1 | DATA         | READ | 16384 | 48162 |  752 |     331 |
    | xx.xxx.xxx.xx1 |    xxxx2 | DATA         | READ | 16384 | 47485 |  741 |     336 |
    | xx.xxx.xxx.xx1 |    xxxx3 | DATA         | READ | 16384 | 48235 |  753 |     331 |
    +----------------+----------+--------------+------+-------+-------+------+---------+
    3 rows in set
    

    根据查询结果,将获取到的各节点的磁盘校准值作为上限值来规划租户可用的 IOPS。由于集群内可能有多个租户部署在相同的 OBServer 节点,您可以需要根据业务实际情况来分配这些 IOPS。

    假设某集群下有两个租户,且两个租户都部署在相同的 OBServer 节点上,每个 OBServer 节点的 16 KB 读的磁盘 IOPS 基准值均相同,为 20000 IOPS,同时,预计两个租户的负载差不多,则可以将 20000 IOPS 平分给两个租户(具体可根据实际业务情况来为租户划分可用的 IOPS),即每个租户的 MAX_IOPS 和 MIN_IOPS 均配置为 10000,您也可以根据业务考虑,将 MIN_IOPS 设置为小于 MAX_IOPS 的某个值。

  5. 执行以下命令,修改租户的 MAX_IOPS 和 MIN_IOPS 值。

    建议先修改 MIN_IOPS 后再修改 MAX_IOPS。

    ALTER RESOURCE UNIT unit_name MIN_IOPS = xxx;
    
    ALTER RESOURCE UNIT unit_name MAX_IOPS = xxx;
    

步骤二:配置资源隔离计划

假设当前租户中已有 tp_user 和 ap_user 等 2 个用户。

您可以参考以下步骤配置资源隔离计划,以控制不同用户或后台任务使用不同的 CPU 或 IOPS 资源。

  1. 租户管理员登录集群的 Oracle 租户。

  2. 调用 DBMS_RESOURCE_MANAGER 系统包中的 CREATE_CONSUMER_GROUP 子程序创建资源隔离所需的 2 个资源组。

    语句如下:

    BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
    consumer_group => 'group_name' ,
    COMMENT => 'coments'
    );
    END; 
    

    相关参数说明如下:

    • CONSUMER_GROUP:定义资源组名称。

    • COMMENT:填写资源组的备注信息。

    例如,创建以下 2 个资源组,分别为 big_group 和 small_group。

    obclient [SYS]> delimiter //
    
    obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
    consumer_group => 'big_group' ,
    COMMENT => 'TP'
    );
    END; //
    
    obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
    consumer_group => 'small_group' ,
    COMMENT => 'AP'
    );
    END; //
    

    创建成功后,可以查询 DBA_RSRC_CONSUMER_GROUPS 视图进行确认。有关 DBA_RSRC_CONSUMER_GROUPS 视图的详细介绍请参见 DBA_RSRC_CONSUMER_GROUPS。

  3. 调用 DBMS_RESOURCE_MANAGER 系统包中的 CREATE_PLAN 子程序,创建资源管理计划。

    语句如下:

    BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN(
    PLAN => 'plan_name',
    COMMENT =>'coments'
    );
    END;
    

    相关参数说明如下:

    • PLAN:定义资源管理计划名称。

    • COMMENT:填写资源管理计划的备注信息。

    例如,创建一个名为 plan_a 的资源管理计划。

    obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN(
    PLAN => 'plan_a');
    END; //
    

    创建成功后,可以查询 DBA_RSRC_PLANS 视图进行确认。有关 DBA_RSRC_PLANS 视图的详细介绍请参见 DBA_RSRC_PLANS。

  4. 调用 DBMS_RESOURCE_MANAGER 系统包中的 CREATE_PLAN_DIRECTIVE 子程序,创建资源管理计划对应的资源管理计划内容,用于启用资源管理计划时,限制资源组所使用的 CPU 资源和 IOPS 资源。

    语句如下:

    BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    PLAN => 'plan_name',
    GROUP_OR_SUBPLAN => 'group_name',
    COMMENT  => 'comments',
    MGMT_P1 => int_value,
    UTILIZATION_LIMIT => int_value,
    MIN_IOPS => int_value,
    MAX_IOPS => int_value,
    WEIGHT_IOPS => int_value,
    MAX_NET_BANDWIDTH => int_value,
    NET_BANDWIDTH_WEIGHT => int_value);
    END;
    

    相关参数说明如下:

    • PLAN:指定该资源管理计划内容所关联的资源管理计划名。

    • GROUP_OR_SUBPLAN:指定资源组。

    • COMMENT:填写资源管理计划内容的备注信息,默认值为 NULL。

    • MGMT_P1:指定系统满负载情况下,相对可用的最大 CPU 占比,默认值为 100。

    • UTILIZATION_LIMIT:指定资源组使用的 CPU 资源的上限。该参数的默认值为 100,取值范围为 (0, 100]。100 表示最大可使用租户全部 CPU 资源。如果取值为 40 则表示最大可使用租户 40% 的 CPU 资源。

    • MIN_IOPS:用于出现 IO 争用时,资源组预留的 IOPS 资源,总和不超过 100,默认值为 0。

    • MAX_IOPS:用于指定资源组最大可使用的 IOPS 资源,总和可以超过 100,默认值为 100。

    • WEIGHT_IOPS:用于指定 IOPS 的权重值,总和可以超过 100,默认值为 0。

    • MAX_NET_BANDWIDTH:用于指定最大可以使用的网络带宽资源,总和可以超过 100,默认值为 100。

    • NET_BANDWIDTH_WEIGHT:用于指定网络带宽的权重值,总和可以超过 100,按比例切分,默认值为 0。

    示例如下:

    • 指定资源计划为 plan_a,绑定资源组 big_group,并指定可使用的 CPU 资源上限为租户 CPU 总资源的 60%。同时,当出现 IO 争用时,指定最少可用的 IOPS 资源为 20%,可使用的 IOPS 资源上限为 IOPS 总资源的 100%,IOPS 资源权重为 20,可使用的网络带宽资源为 50%,网络带宽权重为 50。

      obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
      PLAN => 'plan_a',
      GROUP_OR_SUBPLAN => 'big_group',
      COMMENT  => 'TP 优先',
      UTILIZATION_LIMIT =>60,
      MIN_IOPS => 20,
      MAX_IOPS => 100,
      WEIGHT_IOPS => 20,
      MAX_NET_BANDWIDTH => 50,
      NET_BANDWIDTH_WEIGHT =>50);
      END; //
      
    • 指定资源计划为 plan_a,绑定资源组 small_group,并指定可使用的 CPU 资源上限为租户 CPU 总资源的 40%。同时,当出现 IO 争用时,指定最少可用的 IOPS 资源为 10%,最大可使用的 IOPS 资源上限为 IOPS 总资源的 90%,IOPS 资源权重为 30,可使用的网络带宽资源为 60%,网络带宽权重为 60。

      obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
      PLAN => 'plan_a',
      GROUP_OR_SUBPLAN => 'small_group' ,
      COMMENT  => 'AP 优先',
      UTILIZATION_LIMIT =>40,
      MIN_IOPS => 10,
      MAX_IOPS => 90,
      WEIGHT_IOPS => 30,
      MAX_NET_BANDWIDTH => 60,
      NET_BANDWIDTH_WEIGHT =>60);
      END; //
      

    创建成功,可以查询 DBA_RSRC_PLAN_DIRECTIVES 视图和 DBA_OB_RSRC_IO_DIRECTIVES 视图进行确认。

    有关 DBA_RSRC_PLAN_DIRECTIVES视图的详细介绍,参见 DBA_RSRC_PLAN_DIRECTIVES。

    有关 DBA_OB_RSRC_IO_DIRECTIVES 视图的详细介绍,请参见 DBA_OB_RSRC_IO_DIRECTIVES。

  5. 调用 DBMS_RESOURCE_MANAGER 系统包中的 SET_CONSUMER_GROUP_MAPPING 子程序,根据实际使用场景,创建资源隔离匹配规则。

    语句如下:

    BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
       ATTRIBUTE => 'column | user | function',
       VALUE => 'values',
       CONSUMER_GROUP => 'group_name');
       END;
    

    相关参数说明如下:

    • ATTRIBUTE:指定属性类型,属性名称不区分大小写。

      • column 表示 SQL 级资源隔离。

      • user 表示 User 级资源隔离。

      • function 表示 Function 级资源隔离。

    • VALUE:指定属性值。

      • 如果属性类型为 column,则此处需要指定库名、表名、列名、常量值和用户名等信息。

        其中:

        • 库名和用户名为可选,默认库名为当前库名(与用户名同名),如果未指定用户名,则对所有用户生效,包括当前租户中后续新建的用户。

        • 表名、列名、常量值为必选项,并且每项只能指定一个值。在指定常量值时,仅支持指定为数值或字符串。

        • 在指定表名、列名、用户名时,指定的表、列和用户必须存在。

        在 OceanBase 数据库的 Oracle 模式中,语句执行成功后,库名、表名、列名和用户名均会自动调整为大写,如果需要保持为小写,您可以通过添加双引号的方式避免其变成大写。示例如下:

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE        =>  'column',
        VALUE            => '"test"."t1"."c3" = 3 for "user_big"',
        CONSUMER_GROUP   => 'big_group');
        END; //
        
      • 如果属性类型为 user,则此处指定为用户名即可。当前仅支持指定一个用户。

      • 如果属性类型为 function,则此处指定 DAG 线程对应的几种后台任务:compaction_high、ha_high、compaction_mid、ha_mid、compaction_low、ha_low、ddl、ddl_high、clog_high 以及 opt_stats,填写其中一个即可。当前仅支持指定一个任务。各任务对应的详细说明,参见 资源隔离概述。

    • CONSUMER_GROUP:指定需要绑定的资源组。表示当 SQL 命中 VALUE 中所设置的匹配规则后,需要绑定在哪个资源组上执行该语句。当前仅支持绑定一个资源组。

      如果未指定要绑定的资源组,则默认绑定系统内置的 OTHER_GROUPS。系统内置的 OTHER_GROUPS 对应的资源如下:

      • MIN_IOPS = 100 - SUM(租户内其他资源组的总和)

      • MAX_IOPS = 100

      • WEIGHT_IOPS = 100

    示例如下:

    • 创建 SQL 级资源隔离匹配规则。

      • 指定当用户 tp_user 执行的一条 WHERE 条件中包含 sys.t.c3 = 3 的 SQL 语句时,该 SQL 语句绑定到名为 big_group 的资源组上执行,并使用该资源组所限制的 CPU 资源和 IOPS 资源。

        注意

        执行 SQL 语句时,并不需要语句中必须包含 sys.t.,只需要 c3 最终被解析为 sys.t.c3,则该 SQL 语句就会绑定到名为 big_group 的资源组上执行。例如:SELECT * FROM sys.t WHERE c3 = 1;。

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => 'column',
        VALUE => 'sys.t.c3=3 for tp_user',
        CONSUMER_GROUP => 'big_group');
        END; //
        
      • 指定当执行的一条 WHERE 条件中包含 t.c3=5 的 SQL 语句时,该 SQL 语句绑定到名为 small_group 的资源组上执行,并使用该资源组所限制的 CPU 资源和 IOPS 资源。

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => 'column',
        VALUE => 't.c3=5',
        CONSUMER_GROUP => 'small_group');
        END; //
        

      除了通过调用 SET_CONSUMER_GROUP_MAPPING 子程序来绑定资源组,OceanBase 数据库还支持通过 Hint 绑定资源组的方式。用户可以通过使用 Hint 灵活地将待执行的 SQL 提交到指定的资源组。例如,待执行的 SQL 语句是 SELECT * FROM T,如果希望该 SQL 语句使用资源组 big_group 所限制的资源,则使用 Hint 方式绑定对应资源组的示例如下:

      obclient [SYS]> SELECT /*+resource_group('big_group')*/ * FROM T;
      

      说明

      通过 Hint 方式指定资源组后,如果资源组不存在,则语句执行时使用默认的资源组 OTHER_GROUPS。

    • 创建 User 级资源隔离匹配规则。

      • 指定 tp_user 用户执行的 SQL 绑定到名为 big_group 的资源组上执行,并使用该资源组所限制的 CPU 资源和 IOPS 资源。

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => 'user',
        VALUE => 'tp_user',
        CONSUMER_GROUP => 'big_group');
        END; //
        
      • 指定 ap_user 用户执行的 SQL 绑定到名为 small_group 的资源组上执行,并使用该资源组所限制的 CPU 资源和 IOPS 资源。

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => 'user',
        VALUE => 'ap_user',
        CONSUMER_GROUP => 'small_group');
        END; //
        
    • 创建 Function 级资源隔离匹配规则。

      • 指定执行 ha_high 的任务时,系统绑定到名为 big_group 的资源组上执行,并使用该资源组所限制的 CPU 资源和 IOPS 资源。

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => 'function',
        VALUE => 'ha_high',
        CONSUMER_GROUP => 'big_group');
        END; //
        
      • 指定执行 ddl_high 的任务时,系统绑定到名为 small_group 的资源组上执行,并使用该资源组所限制的 CPU 资源和 IOPS 资源。

        obclient [SYS]> BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => 'function',
        VALUE => 'ddl_high',
        CONSUMER_GROUP => 'small_group');
        END; //
        

    创建成功后,可以查询 DBA_RSRC_GROUP_MAPPINGS 视图进行确认。有关 DBA_RSRC_GROUP_MAPPINGS 视图的详细介绍请参见 DBA_RSRC_GROUP_MAPPINGS。

  6. 为资源组启用合适的资源管理计划。

    由于不同的资源管理计划中,同一个资源组被限制的资源可能不同。您需要为资源组启用合适的资源管理计划。

    obclient [SYS]>delimiter ;
    
    obclient [SYS]> ALTER SYSTEM SET resource_manager_plan = 'plan_a';
    

    说明

    如果不需要对资源进行限制,可以使用 ALTER SYSTEM SET resource_manager_plan = ''; 语句禁用所有资源计划。

配置后的注意事项

  • 资源隔离匹配规则添加后,如果删除了用户后再重建,则资源隔离匹配规则仍然适用。

  • 资源隔离匹配规则添加成功后不是立即生效,预计可能在 10 秒内开始生效,具体以实际环境为准。

  • SQL 级资源隔离的优先级高于 User 级资源隔离和 Function 级资源隔离。

  • 资源隔离匹配规则添加后,目前仅在 SELECT、INSERT、UPDATE、DELETE 等语句中生效,在 DDL 和 DCL 语句中不生效,在 PL 中也不生效。在 prepareStatement 中可以生效。

配置后的性能影响

  • User 级资源隔离和 Function 级资源隔离在 SQL 未解析前即可确认使用哪个资源组的资源,故对性能无影响。

  • SQL 级资源隔离对性能的影响主要来自重试。不同于 User 级资源隔离和 Function 级资源隔离在一条 SQL 未解析前就确定了应该使用哪个资源使用组的资源,SQL 级资源隔离在 SQL 解析或命中 Plan Cache 时,才能确定应该使用哪个资源使用组的资源,此时如果发现应该使用的资源组与当前正在使用的不同,那么系统就会执行一次重试,使用匹配规则对应的资源使用组的资源来处理这条 SQL。

    SQL 级资源隔离对性能的影响主要分为以下三种情况:

    1. 当一条 SQL 未匹配到任意一条规则时,对性能几乎没有影响。

    2. 当一条 SQL 匹配到一条规则时,假设该规则所指定的资源使用组为 big_group, 不仅本 SQL 最终会以 big_group 的资源执行,下一条 SQL 也会先以 big_group 的资源执行,直到匹配到规则发现需要切换到其他资源组,系统才会进行重试。对于连续执行一批 SQL,并且这些 SQL 均绑定在同一个资源组上的场景,使用该策略可以实现仅处理一批中的第一条 SQL 时需要重试,后续 SQL 都不再需要重试。尽量减少了重试,对性能影响较小。

    3. 当每一条 SQL 预期使用的资源组都与上一条不同,则每一条 SQL 都需要重试一次,对性能的影响较大。

相关文档

  • 资源隔离概述

  • 磁盘性能校准

  • 后台任务的资源隔离案例

本文目录

前提条件背景信息步骤一(可选):将租户的 MAX_IOPS 和 MIN_IOPS 配置为有效值步骤二:配置资源隔离计划配置后的注意事项配置后的性能影响相关文档
有帮助
无帮助
反馈
AI

OceanBase

OceanBase 海扬数据库始创于 2010 年,是完全自主研发的数据库公司。2020年开始独立商业化运作,历经15年大规模核心场景验证,目前是中国数据库的领军企业之一。从分布式数据库到 AI 数据库,为企业提供安全、稳定、可扩展的数据底座,推动数据基础设施全面拥抱 AI 时代。

关于我们

关于 OceanBase最新动态资质荣誉客户专家委员会招贤纳士合作伙伴年度发布会开发者大会

资源与服务

支持与服务文档知识库软件与工具下载培训与认证在线体验数据库专题视频

社区

快速上手开发者中心博客活动学习问答GitHub

数据库百科

分布式数据库国产数据库OLTP 数据库OLAP 数据库HTAP 数据库数据库向量数据库向量检索

联系我们

服务热线:
400-109-0633
商务咨询
培训认证技术支持媒体合作
京公网安备11010802047223号京公网安备11010802047223号
京ICP备20024574号-1
合字B1.B2-20250395
网站服务协议隐私协议安全响应协议
OceanBase 版权所有 © 2026 基础资源和备案服务由阿里云提供