Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OB 运维 | 计算 OceanBase 可用 CPU 的核心逻辑

OB 运维 | 计算 OceanBase 可用 CPU 的核心逻辑

作者头像
爱可生开源社区
发布于 2025-02-26 14:00:13
发布于 2025-02-26 14:00:13
6000
代码可运行
举报
运行总次数:0
代码可运行

作者:姚嵩,不知道是地球人还是外星人,知道的可以留言告诉小编...

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 1600 字,预计阅读需要 5 分钟。


1背景

在 OceanBase 中创建租户时,时常会遇到因内存或 CPU 等资源不足导致的租户创建失败的情况。

本文将讨论计算 OceanBase 4.x 可用 CPU 的核心逻辑。

测试版本

OceanBase_CE-v4.2.1.8

相关配置

在开始之前,需要先了解几个与 CPU 相关的配置。

  • resource_hard_limit:CPU 超卖的百分比。是否开启 enable_rebalance 不影响超分。
  • cpu_count:系统/主机 CPU 总数(逻辑 CPU 总核数)。
    • 2.2.77 修改该配置后,需要重启 observer
    • 4.2.1.8 修改该配置后,不需要重启 observer
    • 此配置用户可自定义,且可以设置大于实际的 CPU 总数。
  • cpu_reserved(V4 已弃用该配置):cpu_count 中为系统/主机预留的 CPU 核数,剩余的 CPU 才会被数据库使用。

2查看 CPU 情况

可以通过以下 SQL 语句查询两个版本 OBServer 主机的 CPU 使用情况。

2.2.77 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select svr_ip, zone, cpu_total, cpu_assigned, cpu_assigned_percent,
   cpu_capacity ,cpu_max_assigned ,
   (cpu_capacity-cpu_assigned) cpu_remained ,
   (cpu_total-cpu_max_assigned) cpu_max_remained
from oceanbase.__all_virtual_server_stat ;

4.2.1.8 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select svr_ip, zone, cpu_capacity_max, cpu_assigned,
   cpu_assigned/cpu_capacity cpu_assigned_percent,
   cpu_capacity ,cpu_assigned_max ,
   (cpu_capacity-cpu_assigned) cpu_remained ,
   (cpu_capacity_max-cpu_assigned_max) cpu_max_remained
from oceanbase.GV$OB_SERVERS ;

查询字段说明

在上述 SQL 中,查询与 CPU 有关的字段:

  • cpu_total:主机供 OB 使用的 CPU 数量(含超卖),等价于 cpu_capacity * resource_hard_limit(配置),即:(cpu_count(配置) - cpu_reserved(配置)) * resource_hard_limit(配置)
  • cpu_capacity_max:等价于 cpu_total
  • cpu_assigned:已分配的 unit 的 min_cpu 之和(oceanbase.gv$unit 表中 min_cpu 之和)。
  • cpu_max_assigned:已分配的 unit 的 max_cpu 之和(oceanbase.gv$unit 表中 max_cpu 之和)。
  • cpu_assigned_max:等价于 cpu_max_assigned
  • cpu_assigned_percent:已分配的 CPU 占供 OceanBase 使用的 CPU 数量的百分比(cpu_assigned/cpu_capacity)。
  • cpu_capacity:主机供 OceanBase 使用的 CPU 数量(不含超卖)。
    • 2.2.77 版本:等价于 cpu_count(配置) - cpu_reserved(配置)
    • 4.2.1.8 版本:等价于 cpu_count(配置)
  • cpu_remained:添加的字段,含义为主机上的可分配的剩余的 min_cpu(最大不会超过 cpu_capacity)。计算公式为:cpu_capacity - cpu_assigned
  • cpu_max_remained:添加的字段,含义为剩余可分配的最大 CPU(最大不会超过 cpu_total)。计算公式为:cpu_total - cpu_max_assigned

说明

在定义 resource unit 的时候,unit 可以定义 min_cpumax_cpu

参考以下四个原则:

  1. 主机上所有 unit 的 min_cpu 之和要小于 oceanbase.__all_virtual_server_stat 表的 cpu_capacity 字段值。
  2. 主机上所有 unit 的 max_cpu 之和要小于 oceanbase.__all_virtual_server_stat 表的 cpu_total 字段值。
  3. 主机上所有 unit 的 min_cpu 总和的上限是物理 CPU 的核数。
  4. 主机上所有 unit 的 max_cpu 总和的上限是是物理 CPU 的核数 * 超分百分比。

3修改配置 cpu_count

两个版本修改配置 cpu_count 的步骤。

2.2.77 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 查看 resource_hard_limit、cpu_count、cpu_reserved
show parameters where name in ('resource_hard_limit','cpu_count','cpu_reserved') \G
-- 查看允许 OB 使用的总 CPU(cpu_total)
select svr_ip, zone, cpu_total, cpu_assigned, cpu_assigned_percent,
       cpu_capacity ,cpu_max_assigned
from oceanbase.__all_virtual_server_stat ;
-- 设置 cpu_count 为 20(低版本 cpu_count 的修改需要重启 OBServer 进程)
alter system set cpu_count=20 ;
-- 重启 OBServer (略)
-- 查看允许 OB 使用的 CPU(cpu_total)
select svr_ip, zone, cpu_total, cpu_assigned, cpu_assigned_percent,
       cpu_capacity ,cpu_max_assigned ,(cpu_capacity-cpu_assigned) cpu_remained
from oceanbase.__all_virtual_server_stat ;

4.2.1.8 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 查看 resource_hard_limit 、cpu_count
show parameters where name in ('resource_hard_limit', 'cpu_count')  \G

-- 查看允许 OB 使用的 CPU
select svr_ip, zone, cpu_capacity_max, cpu_assigned, cpu_assigned/cpu_capacity cpu_assigned_percent,
       cpu_capacity ,cpu_assigned_max ,
       (cpu_capacity-cpu_assigned) cpu_remained ,
       (cpu_capacity_max-cpu_assigned_max) cpu_max_remained
    from oceanbase.GV$OB_SERVERS ;
-- 设置 cpu_count 为 20
alter system set cpu_count=20 ;
-- 查看允许使用的 CPU
select svr_ip, zone, cpu_capacity_max, cpu_assigned, cpu_assigned/cpu_capacity cpu_assigned_percent,
       cpu_capacity ,cpu_assigned_max ,
       (cpu_capacity-cpu_assigned) cpu_remained ,
       (cpu_capacity_max-cpu_assigned_max) cpu_max_remained
    from oceanbase.GV$OB_SERVERS ;

4测试主机超分的 CPU 情况

测试两个版本在主机超分的情况下剩余的 min_cpumax_cpu

2.2.77 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 配置设置
alter system set __min_full_resource_pool_memory=1073741824 ;
show parameters where name in ('resource_hard_limit','cpu_count','cpu_reserved') \G
alter system set resource_hard_limit=120 ;
alter system set cpu_count=40 ;
alter system set cpu_reserved=2 ;
show parameters where name in ('resource_hard_limit','cpu_count','cpu_reserved') \G
-- 重启 OB 集群(略)
-- 查看当前的 CPU 限额
select svr_ip, zone, cpu_total, cpu_assigned, cpu_assigned_percent,
    cpu_capacity ,cpu_max_assigned ,
    (cpu_capacity-cpu_assigned) cpu_remained ,
    (cpu_total-cpu_max_assigned) cpu_max_remained
from oceanbase.__all_virtual_server_stat ;
点击放大,建议在 PC 下浏览
点击放大,建议在 PC 下浏览

点击放大,建议在 PC 下浏览

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 设置一个 min_cpu 为 27.5,max_cpu 为 32.6 的租户(内存配置为 1G):
   -- 创建 resource unit
      create resource unit mini min_cpu=27.5, max_cpu=32.6, max_memory='1G',min_memory='1G',max_iops=10000,min_iops=1000,max_session_num=1000000,max_disk_size='10G';
   -- 查看 zone 名称(假设只有一个 zone: META_ZONE_1)
      select distinct zone  from oceanbase.__all_zone ;
   -- 创建 resource pool,创建 resource pool 时会校验主机资源规格是否充足
      create resource pool mini_pool_1 unit=mini ,unit_num=1 ,zone_list=('META_ZONE_1');
   -- 创建 tenant
      create tenant t1 charset='utf8mb4',primary_zone='META_ZONE_1',resource_pool_list=('mini_pool_1') set ob_tcp_invited_nodes='%';
   -- 调整 resource unit 的资源规格
      alter resource unit mini  min_cpu=27.6 ;  -- 报错
      alter resource unit mini  max_cpu=32.7 ;  -- 报错
   -- 清理
      drop tenant if exists t1 force ;
      drop resource pool if exists mini_pool_1 ;
      drop resource unit if exists mini ;

4.2.1.8 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 配置设置
   alter system set __min_full_resource_pool_memory=1073741824 ;
   show parameters where name in ('resource_hard_limit','cpu_count') \G
   alter system set resource_hard_limit=120 ;
   alter system set cpu_count=40 ;
   show parameters where name in ('resource_hard_limit','cpu_count') \G
-- 查看当前的 CPU 限额
   select svr_ip, zone, cpu_capacity_max, cpu_assigned,
       cpu_assigned/cpu_capacity cpu_assigned_percent,
       cpu_capacity ,cpu_assigned_max ,
       (cpu_capacity-cpu_assigned) cpu_remained ,
       (cpu_capacity_max-cpu_assigned_max) cpu_max_remained
    from oceanbase.GV$OB_SERVERS ;  -- cpu_capacity_max 等于 cpu_count(配置)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 设置一个 min_cpu 为 33,max_cpu 为 41 的租户:
   -- 创建 resource unit
      create resource unit mini max_cpu=41,min_cpu=33,memory_size='1G',log_disk_size='2G' ;
   -- 查看 zone 名称(假设只有一个 zone: zone1)
      select distinct zone  from oceanbase.__all_zone ;
   -- 创建 resource pool,创建 resource pool 时会校验主机资源规格是否充足
      create resource pool mini_pool_1 unit=mini ,unit_num=1 ,zone_list=('zone1');
   -- 创建 tenant
      create tenant t1 charset='utf8mb4',primary_zone='zone1',       resource_pool_list=('mini_pool_1') set ob_tcp_invited_nodes='%';
   -- 调整 resource unit 的资源规格
      alter resource unit mini  min_cpu=33.1 ;  -- 报错
      alter resource unit mini  max_cpu=41.1 ;  -- 报错
   -- 清理
      drop tenant if exists t1 force ;
      drop resource pool if exists mini_pool_1 ;
      drop resource unit if exists mini ;

5总结

在 OceanBase 4.x 之前,cpu_count 表示主机的总 CPU 核数,cpu_reserved 表示预留给主机使用的 CPU 核数;除了预留给主机使用的 CPU 外,其他 CPU 都是给租户使用。

在 OceanBase 4.x 之后,cpu_count 表示供 OB 租户使用的总 CPU 核数,不再包含预留给主机使用的 CPU 了,cpu_reserved 配置也删除了。

  • 主机上能分配的 min_cpu 的总和的上限
    • OceanBase 4.x 之前 cpu_count - cpu_reserved
    • OceanBase 4.x 之后 cpu_count
  • 主机上能分配的 max_cpu 的总和的上限
    • 不能超分时,max_cpu 的总和上限等于 min_cpu
    • 允许超分时,max_cpu 的总和上限等于 min_cpu * resource_hard_limit
  • 主机上 max_cpu - min_cpu 即是允许超分的 CPU 核数。
  • cpu_count 的数量可以自行定义,即使超过主机 CPU 总核数也不会报错,如果将 cpu_count 设置的非常大,且将这些都分配给租户使用了,这实际上已经出现了 CPU 超分的情况,可能导致 CPU 使用率非常高,租户之间相互影响。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OB 运维 | 日志盘过小也会导致创建租户失败?
某客户基于节约资源的想法,将日志盘设置的比较小,日志盘大小约为集群内存规格的 1.5 倍,当创建租户时,CPU 和内存都充足的情况下,却存在报错 "LOG_DISK resource not enough",我们尝试复现问题并定位原因。
爱可生开源社区
2024/09/14
1320
OB 运维 | 日志盘过小也会导致创建租户失败?
技术分享 | OceanBase 资源及租户管理
https://opensource.actionsky.com/20221207-oceanbase/
爱可生开源社区
2023/02/22
8420
技术分享 | OceanBase 4.X 最小化单机部署
我们知道,OceanBase 3.X 版本部署单机架构(一个ZONE,一台SERVER)需要耗费较多硬件资源才能正常使用。OceanBase 4.X 版本发布后,在资源占用这块做了很多优化,官方宣称4.X 版本是单机分布式一体化的架构,单台OB SERVER对数据的处理与单机数据库相比性能相当。比如对于 OceanBase 3.X 版本,就算是单机部署,对多个分区的数据更新依然需要两阶段提交来保证其原子性;对于OceanBase 4.X 单机部署,对多分区的数据更新不再需要两阶段提交来保证其原子性。
爱可生开源社区
2023/01/17
1.1K0
技术分享 | OceanBase 4.1 全面测评及部署流程,看这篇就够了【建议收藏】
测试 OceanBase 对比 MySQL,TiDB 的性能表现,数据存储压缩,探索多点内部项目一个数据库场景落地 Oceanbase(MySQL->OceanBase)。
爱可生开源社区
2023/08/18
1K0
技术分享 | OceanBase 4.1 全面测评及部署流程,看这篇就够了【建议收藏】
OceanBase 社区版OBD部署示例主副本
以root用户安装时,默认安装在/root/observer目录下,本文以 root用户安装在/data/observer目录下。创建过程。
你要的小米吖
2021/09/17
2K0
OB 运维 | 一文讲透 OceanBase 单机版【建议收藏】
OceanBase 单机集中式集群(即单机版,后文不再称“单机集中式集群”)是OceanBase 推出的极简数据库架构,区别于分布式集群架构,单机版无多副本和扩缩容能力,适用于开发测试环境及数据安全性要求不高的业务系统。
爱可生开源社区
2024/09/14
4740
OB 运维 | 一文讲透 OceanBase 单机版【建议收藏】
技术分享 | 使用 ANTMAN 工具替换 OceanBase 云平台节点
上海某公司 DBA,曾经从事银行、证券数仓设计、开发、优化类工作,现主要从事电信级 IT 系统及数据库工作。有三年以上 OceanBase 工作经验,参与某通信行业核心数据库全面国产化工作。获得的专业技能与认证包括 OceanBase OBCP、Oracle OCP 11g、OracleOCM 11g 、MySQL OCP 5.7 、腾讯云TBase、腾讯云 TDSQL、阿里云 ACP 、KingBase KCP。
爱可生开源社区
2023/08/18
2920
技术分享 | 使用 ANTMAN 工具替换 OceanBase 云平台节点
技术分享 | OceanBase 集群扩容缩容
扩容资源:进入OCP -> 找到要扩容的集群 -> 总览 -> 新增OBServer;
爱可生开源社区
2023/03/02
1.1K0
OB 运维 | OceanBase 单机改三副本:实操手记与深思
作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。
爱可生开源社区
2025/02/19
1680
OB 运维 | OceanBase 单机改三副本:实操手记与深思
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
在开始学习OceanBase的概念,发现了很多新的知识和新的架构的思维方式,用传统的数据库理念去理解OceanBase可能有一些吃力,这里总结开始学习OceanBase数据库的学习的一些概念和大家进行探讨,加速理解OceanBase的一些基础知识和概念。
AustinDatabases
2024/11/25
2040
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
【DB宝87】手动部署 OceanBase 三副本集群(在同一个节点)
OceanBase Docker安装体验:https://www.xmmup.com/oceanbase-dockeranzhuangtiyan.html 手动部署 OceanBase 单副本集群:h
AiDBA宝典
2022/02/23
7650
【DB宝87】手动部署 OceanBase 三副本集群(在同一个节点)
【DB宝75】利用Docker搭建OceanBase 3.1.1社区版的集群
环境是这样的,只有一台虚拟机,配置16c80G,准备使用docker来模拟出4台CentOS主机,搭建OceanBase 3.1.1社区版的集群。OBServer每台至少需要8G内存,否则不能启动。
AiDBA宝典
2021/12/17
1.1K0
【DB宝75】利用Docker搭建OceanBase 3.1.1社区版的集群
OB 运维 | OceanBase 4.1.0 clog 目录探究
爱可生 DBA 团队成员,擅长数据库故障排查和处理。对技术抱有热忱,实践是检验真理的唯一标准~
爱可生开源社区
2023/08/18
9500
OB 运维 | OceanBase 4.1.0 clog 目录探究
OB 运维 | 一文搞定 OceanBase 各级别数据量统计
作者:胡呈清,爱可生交付团队DBA,OBCE,擅长故障分析、性能优化。个人博客:[简书 | 轻松的鱼],[微信公众号 | 澄清一下],欢迎关注与讨论。
爱可生开源社区
2024/12/19
1750
OB 运维 | 一文搞定 OceanBase 各级别数据量统计
故障分析 | OceanBase 频繁更新数据后读性能下降的排查
本文分析并复现了 OceanBase 频繁更新数据后读性能下降现象的原因,并给出了性能改善建议。
爱可生开源社区
2023/05/15
4320
故障分析 | OceanBase 频繁更新数据后读性能下降的排查
【DB宝85】 OceanBase Docker安装体验
参考:https://www.xmmup.com/dbbao2centos7anzhuangdocker.html
AiDBA宝典
2022/02/23
1K0
【DB宝85】 OceanBase Docker安装体验
深入OceanBase内部机制:资源隔离实现的方式总结
凭借卓越的高并发事务实时处理能力和对大规模数据实时业务决策的强大支持,HTAP技术已崛起为企业提升数据价值挖掘效率、显著降低总成本的首选方案。伴随着国内需求的迅猛增长,专注于HTAP的数据库正由初露锋芒逐渐发展为行业的主流趋势。
公众号:码到三十五
2024/04/25
4470
深入OceanBase内部机制:资源隔离实现的方式总结
技术分享 | OceanBase 安全审计之透明加密
普通用户登录到数据库的 MySQL 租户,创建不指定加密空间的新表 ttttttt2。
爱可生开源社区
2023/09/20
3150
技术分享 | OceanBase 安全审计之透明加密
安装社区版本OB
即可 使用 ip  端口: 2881 密码: xxxxx   用户:root 登录。
问天丶天问
2023/10/17
2740
安装社区版本OB
【DB宝86】使用OBD部署一个OceanBase 三副本集群并使用Promethues监控OB(在不同节点)
参考:https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.1/deploy-the-distributed-oceanbase-cluster
AiDBA宝典
2022/02/23
1.3K0
【DB宝86】使用OBD部署一个OceanBase 三副本集群并使用Promethues监控OB(在不同节点)
推荐阅读
相关推荐
OB 运维 | 日志盘过小也会导致创建租户失败?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验