OB建表报错No memory or reach tenant memory limit Query

【 使用环境 】生产环境
【 OB or 其他组件 】OBCE-4.2.1
【 使用版本 】OBCE-4.2.1
【问题描述】OB数据库建表报错:
No memory or reach tenant memory limit Query: create index if not exists
请教下,这个执行ddl 语句跟租户内存有关系吗?还是说 ob 表数量达到一定的数量,对租户内存有要求?

2 个赞

内存超限了,调大租户内存的占比

3 个赞

租户内存跟表数量有对应关系吗?

2 个赞

有可能是租户的内存不大导致 SQL工作空间内存也不大

2 个赞

表是不是没索引

3 个赞

这是在oms 迁移元数据报错了。表有索引,在建报错的。

2 个赞

ob 在建租户的时候,unit 规格改如何设置大小,有没有最佳实践?

3 个赞

大小随时可以修改,我一般是在迁移得时候给的很大,迁移完成后在缩回来

3 个赞

发一下报错SQL,报错截图及完整的obserevr.log
同时使用obdiag搜集下内存信息
obdiag gather scene run --scene=observer.memory [memory problem] [内存问题]

https://www.oceanbase.com/docs/common-obdiag-cn-1000000000902157

4 个赞


知道这个问题了,ob 库 开了recyclebin,看了下回收站有8万多张表。我准备先清理下回收站,在试试这个建表语句。

2 个赞

我搜索了trace_id ,faxain observer.log 有这个报错:


这个是 内存不足导致表数量达到上线还是 表太多导致的内存不足?

2 个赞

我通过sql 的 trace_id 所有了observer.log 日志 看到如下报错:

这个根因是内存不足还是 表数量达到上线?
这个库很小,业务表也就71张,内存 2c8g*3 zone ,内存不应该不足。

1 个赞


按老师说的,提供一下最好,

1 个赞

根因确定需要相应的日志,请提供下
1.报错SQL(可脱敏后提供)
2.obdiag gather scene run --scene=observer.memory
3.obserevr.log
4.
请按如下步骤提供下日志
1.开启 Trace 功能
SET ob_enable_show_trace=ON;
2.执行问题SQL
3.获取SQL trace_id
SELECT last_trace_id() FROM DUAL;
4.登录对应 OBServer 节点,进入到日志文件所在目录
cd /home/admin/oceanbase/log
5.获取trace_id对应的日志
grep xxxxxxx observer.log --填写第3步获取的trace_id

trace_YB420A262B1B-00061AAF4835527D-0-0.log (44.7 KB)
按照如上方法 ,
cat observer.log* |grep YB420A262B1B-00061AAF4835527D-0-0 获取的日志如上,谢谢!

1 个赞

你这个建表语句是建了多少个分区呢

CREATE TABLE requirement_task (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘表ID,主键,供其他表做外键’,
reqtask_id bigint(20) NOT NULL COMMENT ‘需求任务编号’,
task_initiator varchar(20) NOT NULL COMMENT ‘任务发起人’,
estcomplet_date datetime NOT null COMMENT ‘预计完成日期’,
taskres_person varchar(20) NOT NULL COMMENT ‘任务责任人’,
line_type varchar(50) NOT NULL COMMENT ‘拉线类型’,
masspro_base varchar(20) NOT NULL COMMENT ‘量产基地’,
masspro_line varchar(20) NOT NULL COMMENT ‘量产拉线’,
reqcomplet_time datetime NOT NULL COMMENT ‘要求完成日期’,
nmq_person varchar(20) NOT NULL COMMENT ‘NMQ’,
npq_person varchar(50) NOT NULL COMMENT ‘NPQ’,
pqis_person varchar(50) NOT NULL COMMENT ‘PQIS’,
pqe_person varchar(50) NOT NULL COMMENT ‘基地PQE’,
pqic_person varchar(50) NOT NULL COMMENT ‘PQIC’,
other_dep varchar(50) NOT NULL COMMENT ‘其他部门’,
other_person varchar(50) NOT NULL COMMENT ‘其他责任人’,
task_require varchar(50) NOT NULL COMMENT ‘任务要求’,
task_status varchar(50) NOT NULL COMMENT ‘任务状态’,
created_by varchar(20) DEFAULT ‘1’ COMMENT ‘创建人’,
created_by_name varchar(50) DEFAULT ‘1’ COMMENT ‘创建人名称’,
creation_date datetime DEFAULT NULL COMMENT ‘创建时间’,
last_updated_by varchar(20) DEFAULT NULL COMMENT ‘修改人’,
last_updated_by_name varchar(50) DEFAULT ‘1’ COMMENT ‘修改人名称’,
last_update_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘修改时间’,
object_version_number bigint NOT NULL DEFAULT ‘1’ COMMENT ‘行版本号,用来处理锁’,
PRIMARY KEY (id)
) AUTO_INCREMENT = 1000001 DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMMENT = ‘需求任务表’;

就一个普通表,

已联系老师排查,有进展及时回复你

select t.tenant_name, p.name resource_pool_name, p.unit_count, u.name unit_name, u.max_cpu, u.min_cpu, round(memory_size/1024/1024/1024,2) memory_size_gb, round(u.log_disk_size/1024/1024/1024,2) disk_size_gb, p.zone_list from oceanbase.__all_resource_pool p right join oceanbase.__all_unit_config u on p.unit_config_id=u.unit_config_id left join oceanbase.__all_tenant t on p.tenant_id=t.tenant_id; 连sys租户执行下这sql看下实际给了租户设置了多少G内存

正在处理:obdiag_gather_pack_20240725025536.7z…
2c8g*3 zone ,一共是 6c 24g