资源隔离概述
本文主要介绍了资源隔离相关的概念、资源隔离方式及其适用场景。
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 模式)。
资源隔离方式
OceanBase 数据库的资源隔离从使用粒度,可以分为以下几种类型:
-
用户级资源隔离
用户级的资源隔离又分为 user 和 function 两种。其中:
-
user:用于指定用户与资源组的映射关系,使该用户执行的所有 SQL 使用的资源即为对应 Group 分配的资源,通过使用该特性,可以让不同用户执行不同类型的任务。
-
function:用于指定后台任务与资源组的映射关系,隔离各任务使用的资源。当前支持控制 DAG 线程对应的 8 种后台任务的使用资源。
DAG 线程对应以下 8 种后台任务:
- 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 的转储任务。
-
-
SQL 级资源隔离
SQL 级的资源隔离是比用户级粒度更细的隔离方式。通常适用的场景是,业务中存在多个账号,处理一个账号的一个订单时,会开启一个事务然后执行一批与该账号相关的 SQL (通常是在 WHERE 条件中指定账号的值)。账号中可能存在大账号(数据量较大)和小账号(数据量较小),为了避免大账号把 CPU 资源用完导致小账号的订单无法得到处理,可以将处理不同订单的 SQL 绑定到不同的资源组,绑定后不同订单的 SQL 就会使用不同资源组的资源。




