Skip to main content

资源隔离的效果

CPU 隔离效果

我们观察到,很多客户的跑批业务会安排在业务低峰期,如午夜或者凌晨,此时不用过于担心 OLAP 会影响到 OLTP 类业务,我们可以把集群绝大部分资源分配给 OLAP 类业务,给 OLTP 留下最小资源保证即可。在白天的业务高峰期,通过调整资源隔离方案,可以确保 OLTP 业务资源充足,同时按照预设资源满足基本的 AP 类查询。

在用户使用 OceanBase 的过程中,一般只需要预设两套资源管理计划,白天激活 DAYTIME 计划,夜间激活 NIGHT 计划,就可以实现满足基本的隔离需求的同时实现资源利用率的最大化。

image

例如我们可以用以下语法定义一个白天资源使用计划(resource plan),并且制定了此计划下 OLTP (interactive_group)和 OLAP (batch_group) 的资源百分比。80% 的资源用于 TP,剩下 20% 资源用于 AP。

DBMS_RESOURCE_MANAGER.CREATE_PLAN(
PLAN => 'DAYTIME',
COMMENT => 'More resources for OLTP applications');

DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'DAYTIME',
GROUP_OR_SUBPLAN => 'interactive_group',
COMMENT => 'OLTP group',
MGMT_P1 => 80,
UTILIZATION_LIMIT => 100);

DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'DAYTIME',
GROUP_OR_SUBPLAN => 'batch_group',
COMMENT => 'OLAP group',
MGMT_P1 => 20,
UTILIZATION_LIMIT => 20);

-- 定义好资源使用计划后,用以下方式激活:
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DAYTIME';

按照类似的方式,可以定义夜晚的资源使用计划,并在业务低峰期激活它。

OceanBase 还提供了按登录用户对 SQL 分类的方法,客户可以创建一个新用户用于执行 AP 分析型 SQL,只要是该用户发起的 SQL,都会被判定为是 AP 负载,这样分类方式让资源隔离的粒度更细,也更简单有效。同时,OceanBase 会把执行时间超过 5s(时间可配置)的请求识别为当作大查询,大查询会被降低优先级。

我们刚刚提到可以建一个特殊用户专门来服务 AP 业务,那么我们先创建两个测试用户:AP 和 TP。我们把 AP 任务绑定到 AP_GROUP,TP 任务绑定到 TP_GROUP。假设这个业务白天的时候 TP 负载高,AP 集中在晚上。因此我们为白天和晚上设置两个不同的资源使用计划,白天的时候我们希望 80% 的资源用于 TP,剩下 20% 资源用于 AP,夜晚的时候希望 50% 的资源用于 TP,剩下 50% 资源用于 TP。

从下图测试结果可以看出来,切换为夜晚计划后,AP 的 CPU 资源占比变大后,AP 的 QPS 明显变高,TP 的 QPS 有一些降低。下图中 AP 和 TP QPS 发送变化的点就是切换资源使用计划的时间。

image

上图中看起来 TP 的 QPS 降低比较少,和 AP 的 QPS 变化相比起来没有那么明显。这是因为 AP 是从 0.3 到 0.5,增加了 66.7%, TP 从 0.7 到 0.5,只会下降 28.5%,所以 TP 的 QPS 变化幅度在理想情况下就要比 AP 的变化幅度更小,是符合预期的。

IOPS 隔离效果

为了验证磁盘 IO 隔离的能力,我们用单元测试测做了一项仿真实验:

  • 设置 4 个租户,每个租户启动 64 个线程发送 IO 请求,IO 请求固定为 16KB 随机读。
  • 租户 1、2、4 的负载持续 20 秒,租户 3 的负载从第 10 秒开始,持续 10 秒。
  • 实验磁盘 IOPS 上限大概在 6w,如果不加限制,任意一个租户单独都可以打满磁盘。

首先验证租户间磁盘 IO 隔离,各租户的配置和实验结果如下方图表所示: image

image

  • 磁盘已经打满时,新加入的租户 3 依然拥有 1 万 IOPS,因为其通过 MIN_IOPS 预留了 1 万;
  • 租户 4 的 IOPS 没有超过 5 千,因为其通过 MAX_IOPS 设置了资源上限;
  • 无论负载如何变化,租户 1 和租户 2 的 IOPS 比值大概为 2 : 1,正如权重比例要求。

接下来,我们将验证租户内负载的隔离。我们在租户 2 内设置了 4 个类别的负载,各负载的配置和实验结果如下方图表所示:

image

image

  • B 负载稳定在近 2000 IOPS,哪怕其权重为 0,因为 B 负载通过 MIN_PERCENT 预留了租户 MIN_IOPS 97% 的资源;
  • A 负载稳定在 1000 IOPS 左右,因为其 MAX_PERCENT 为 1,最多只能使用租户 MAX_IOPS 1% 的资源;
  • C、D 负载的 IOPS 比例始终保持大约 2 : 1,因为其权重为 50 : 25。

从上述两个实验可以看出,OceanBase 在支持租户间磁盘 IO 隔离的同时,还支持租户内负载间的磁盘 IO 隔离,且都满足 reservation(保留),limitation(限制),proportion(比例)这三种资源隔离语义。

推荐阅读

Loading...