基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
IOPS 隔离
更新时间:2024-03-12 07:26
OceanBase 数据库是一个多租户系统,需要按租户隔离 CPU、内存、磁盘带宽等资源。OceanBase 数据库从 V4.0 版本开始支持磁盘带宽隔离。本文介绍磁盘带宽隔离的概念、支持的隔离能力、以及对应的运维手段。
OceanBase 磁盘带宽隔离功能介绍
磁盘带宽隔离是指在 OceanBase 多租户系统中,确保一个租户的磁盘 IO 操作不会影响到另一个租户的 IO 性能。该功能保证了不同租户之间以及同一个租户内部不同类型的 IO 请求之间的磁盘带宽是相互独立的。
为什么使用 IOPS 描绘磁盘带宽 ?
IOPS(Input/Output Operations Per Second,每秒输入输出操作数)是衡量存储设备性能的一个标准。OceanBase 使用 IOPS 来描述磁盘带宽的分配,因为它更直接地反映了用户在执行SQL查询时感知到的时延(SQL RT)。基准 IO 请求定为 16KB 随机读是因为 OceanBase 的微块尺寸默认为 16KB。
如何描述 OceanBase 的 IOPS ?
OceanBase 中磁盘带宽的 IOPS 使用 MIN,MAX 和 WEIGHT 这三个参数来描述。
MIN:最小保证的资源量,即租户能至少获得的 IOPS。
MAX:资源上限,即租户能获得的最多 IOPS。
WEIGHT:当资源竞争发生时,根据权重比例在 MIN 和 MAX 之间分配资源。
隔离能力
租户间隔离
租户间的 IO 隔离是通过配置 UNIT 来实现的。用户可以通过 UNIT CONFIG 来设定一组 UNIT 的规格。包括 MIN_IOPS,MAX_IOPS 和 IOPS_WEIGHT 参数,从而实现不同租户之间的 IO 隔离。UNIT CONFIG 中的 IOPS 设置支持动态调整,实时生效。
UNIT 创建示例。
CREATE RESOURCE UNIT test_io
MIN_CPU=2, MAX_CPU=4,
MIN_MEMORY=24309411328, MAX_MEMORY=24309411328,
MIN_IOPS=2000, MAX_IOPS=5000, IOPS_WEIGHT=1000,
MAX_SESSION_NUM=3000,
MAX_DISK_SIZE=89759870976;
UNIT 修改示例。
ALTER RESOURCE UNIT box1 IOPS_WEIGHT=2000;
租户内隔离
租户内部的 IO 隔离是通过设置租户级配置项 io_category_config 来实现的。配置格式为 category_name: min_percent, max_percent, weight_percent 并且可以设定多个类别规格,使用分号隔开。
目前支持的 IO 类别包括:log, user, sys, prewarm, large_query。
如果未指定某个类别,则该类别由 other 代表。该配置项要求所有类别的 min_percent 总和不超过 100,weight_percent 总和不超过 100。
如果未指定 other,则系统自动将剩余比例作为 min_percent 和 weight_percent,而 max_percent 固定为 100。
默认配置。
io_category_config 的默认配置为 other: 100,100,100,即租户内各类别 IO 不进行隔离,按照租户 IO 规格的 100% 使用。
限制某一类别 IO。
ALTER SYSTEM SET io_category_config="large_query: 30, 60, 50;" TENANT tenant1;
上述命令限制了 tenant1 的大查询类型 IO 的最大带宽不超过租户最大带宽的 60%,最小带宽不小于租户最小带宽的 30%,权重占租户权重的 50%。
说明
io_category_config 配置项从 V4.0.0 版本开始引入,从 V4.2.0 版本开始弃用。V4.1.0 及以上版本推荐使用 resource manager 配置 IOPS。
适用版本
OceanBase 数据库 V4.0.x 版本。