首批通过分布式安全可靠测评,为关键业务系统打造
资源隔离概述
更新时间:2026-04-30 19:06:39
本文主要介绍了资源隔离相关的概念、资源隔离方式及其适用场景。
cgroup (Control Groups)是 Linux 内核提供的一种机制,这种机制可以根据特定的行为,将一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。
OceanBase 数据库的当前版本中,由于租户工作线程和大部分后台线程均根据租户来区分,网络线程为共享线程,管理员可以在配置 cgroup 目录后,再通过 DBMS_RESOURCE_MANAGER 系统包来控制租户 CPU 和 IOPS 的占用。
DBMS_RESOURCE_MANAGER 系统包
OceanBase 数据库中通过 PL 的 DBMS_RESOURCE_MANAGER 系统包来管理数据库中资源的分配从而实现资源隔离。 DBMS_RESOURCE_MANAGER 系统包主要用于维护以下元素:
资源组:根据资源要求组合在一起的一组会话。系统将资源分配给资源组,而不是单个会话。
资源管理计划:资源管理计划内容的容器,指定如何将资源分配给资源组。您可以通过激活特定的资源管理计划来控制资源的分配。一条资源管理计划可以对应多条资源管理计划内容。但一条资源管理计划中不能包含两条相同的资源管理计划内容。
资源管理计划内容:用于将资源组与资源管理计划相关联,并指定如何将资源分配给该资源组。
关于 DBMS_RESOURCE_MANAGER 系统包的详细介绍,请参见 DBMS_RESOURCE_MANAGER 系统包(Oracle 模式) 和 DBMS_RESOURCE_MANAGER 系统包(MySQL 模式)。
资源隔离方式
通过 DBMS_RESOURCE_MANAGER 系统包配置租户内的资源隔离时,从资源隔离的使用粒度,可以分为以下几种类型:
User 级资源隔离
User 级资源隔离是通过指定用户与资源组的映射关系,使该用户执行的所有 SQL 使用的资源即为对应 Group 分配的资源。
SQL 级资源隔离
SQL 级的资源隔离是比 User 级粒度更细的隔离方式。它是通过将满足某个条件的 SQL 绑定到指定资源组上执行来实现的。通常适用的场景是,业务中存在多个账号,处理一个账号的一个订单时,会开启一个事务然后执行一批与该账号相关的 SQL (通常是在 WHERE 条件中指定账号的值)。账号中可能存在大账号(数据量较大)和小账号(数据量较小),为了避免大账号把 CPU 资源用完导致小账号的订单无法得到处理,可以将处理不同订单的 SQL 绑定到不同的资源组,绑定后不同订单的 SQL 就会使用不同资源组的资源。
Function 级资源隔离
Function 级的资源隔离是通过指定后台任务与资源组的映射关系,隔离各任务使用的资源。Function 级资源隔离用于控制后台任务 CPU 和 IOPS 的使用。
当前支持控制 DAG 线程对应的以下几种后台任务的使用资源:
- COMPACTION_HIGH: Mini Merge 和 DDL KV Merge 任务
- HA_HIGH:复制、Rebuild 和恢复等高优先级高可靠任务
- COMPACTION_MID:Minor Merge 任务
- HA_MID:中优先级高可靠任务,例如迁移任务
- COMPACTION_LOW:Major Merge 任务
- HA_LOW:备份和备份清理等低优先级高可靠任务
- DDL:唯一索引校验、删列补数据等场景的任务
- DDL_HIGH:DDL MemTable 的转储任务
- CLOG_LOW:物理备库和 CDC 读取任务
- CLOG_MID:Follower 副本读共享存储、日志归档读本地盘等任务
- CLOG_HIGH:clog 写入本地盘、clog 文件上传共享存储、Follower 副本读本地盘等任务
- OPT_STATS:统计信息收集任务
- GC_MACRO_BLOCK:宏块回收和复用任务
- SQL_AUDIT:SQL 审计日志落盘
- IMPORT:导入任务
- MVIEW:物化视图后台任务(对于 V4.3.5 版本,从 V4.3.5 BP2 版本开始支持)
- REPLAY_HIGH:日志回放(对于 V4.3.5 版本,从 V4.3.5 BP2 版本开始支持)