Oceanbase SYS租户不足导致的故障案例

最近有个客户的oceanbase在操作业务租户的表做DDL时失败,开始是执行drop table长时间未成功 ,报错ora-600 internal error code, arguments – 4012, timeout. 后尝试重启租户失败,OCP状态显示一直处于“运维中”状态,下面简单记录该问题。

尝试通过OB OCP重启observer, 但是在stop zone环节 执行失败,日志提示

操作OCEANBASE失败,错误信息no memory or reach tenant memory limit

错误原因 连接sys 执行 alter system stop zone ? 失败, 错误信息 no meory or reach tenant memory limit

obclient(root@sys)[oceanbase]> select * from oceanbase.dba_ob_unit_configs where unit_config_id=1 \G
*************************** 1. row ***************************
UNIT_CONFIG_ID: 1
          NAME: sys_unit_config
   CREATE_TIME: 2025-07-01 20:37:40.658941
   MODIFY_TIME: 2025-07-01 20:37:40.658941
       MAX_CPU: 2
       MIN_CPU: 2
   MEMORY_SIZE: 5368709120
 LOG_DISK_SIZE: 8589934592
      MAX_IOPS: 9223372036854775807
      MIN_IOPS: 9223372036854775807
   IOPS_WEIGHT: 2
1 row in set (0.002 sec)

而且此时OCP 上的状态显示“运维中”,OCP 显示的【维护中】状态仅为 OCP METADB 中记录的租户状态,并非 OB 数据库本身的状态,租户实际上可以使用

原因

sys租户内存不足会影响DDL操作, 该环境使用的安装的默认配置,不符合生产库的最佳实践,

系统租户是 OceanBase 数据库的集群管理员为安装 OceanBase 数据库时自动创建。V4.2.1 版本前,系统租户实际可使用的内存上限为 sys_unit_config.memory_size。从 V4.2.1 版本开始,系统租户实际可使用的内存上限为:hidden_sys_memory + sys_unit_config.memory_size。

obclient(root@sys)[oceanbase]> select svr_ip,name,data_type,value,need_reboot,isdefault from __all_virtual_sys_parameter_stat where name in ('memory_limit','system_memory','__min_full_resource_pool_memory') order by 1,2;
+---------------+---------------------------------+-----------+------------+-------------+-----------+
| svr_ip        | name                            | data_type | value      | need_reboot | isdefault |
+---------------+---------------------------------+-----------+------------+-------------+-----------+
| 172.20.2x.213 | memory_limit                    | NULL      | 0M         |        NULL |         1 |
| 172.20.2x.213 | system_memory                   | NULL      | 0M         |        NULL |         1 |
| 172.20.2x.213 | __min_full_resource_pool_memory | NULL      | 5368709120 |        NULL |         1 |
| 172.20.2x.214 | memory_limit                    | NULL      | 0M         |        NULL |         1 |
| 172.20.2x.214 | system_memory                   | NULL      | 0M         |        NULL |         1 |
| 172.20.2x.214 | __min_full_resource_pool_memory | NULL      | 5368709120 |        NULL |         1 |
| 172.20.2x.215 | memory_limit                    | NULL      | 0M         |        NULL |         1 |
| 172.20.2x.215 | system_memory                   | NULL      | 0M         |        NULL |         1 |
| 172.20.2x.215 | __min_full_resource_pool_memory | NULL      | 5368709120 |        NULL |         1 |
+---------------+---------------------------------+-----------+------------+-------------+-----------+
9 rows in set (0.037 sec)

sys 租户和普通租户的重要组成部分略有不同:

  • sys 租户上常见的 Cache 种类类别说明, 如schema_cache存放用户的 Schema 信息,用于提供 SQL 及系统正常运行所依赖的数据库对象的元信息。tablet_table_cache缓存 Tablet 中 schema version 和 table id 的对应关系。vtable_cache缓存 Table 的 Location 信息。等


OceanBase 数据库风险排查指南 中指出sys租户建议不要低于32g

解决方案

最佳实践建议 不要将 sys 租户内存设得太小

  • 生产环境 sys 租户内存 ≥ 32GB(官方明确建议)。
  • 避免在小于 64GB 内存的机器上部署生产集群,以防 sys 租户资源不足。
  • 如需调整,通过 ALTER RESOURCE UNIT sys_unit_config 修改,并在非高峰时段操作。

sys 租户也是一个普通租户,可通过 ALTER RESOURCE UNIT 动态调整其内存, 基于当前硬件资源和租户个数,先调整为20g.


alter resource unit sys_unit_config max_cpu 6, memory_size='20g';

— restart observer

Leave a Comment