学习一下
4013 是租户内存不够。20 万表 × 4 分区意味着海量分区元数据和 schema 对象,光导结构就会占大量租户内存,80G unit 在 1/3 处耗尽很常见。建议:1)分批导入 DDL,每批 commit 并观察租户内存;2)评估是否真需要 20 万独立表/每表 4 分区,能否合并 schema 或减少分区数;3)适当调大 unit memory 或降低并行;4)导入前清空无关对象,导入后做 major freeze/合并。也可以先在小租户验证单批表数量上限。
技术细节讲得很清楚,学到了!
关于20的讨论很有价值,特别是在schema场景下,合理使用unit是关键。
学习一下
这个问题涉及到补充一点和结合问答和hellip可以获得更好的效果的平衡,根据我的经验,适当调整博客会有帮助。
期待更多分享
干货满满,受益匪浅
ERROR 4013 是 OB 的内存不足错误(OB_ALLOCATE_MEMORY_FAILED)。20 万张表每张 4 个 hash 分区 = 80 万个 partition,每个 partition 的 schema 元数据本身就要占不少内存。
几个排查和解决方向:
- 查看内存模块占用:
SELECT tenant_id, svr_ip, mod_name, hold
FROM oceanbase.GV$OB_MEMORY
WHERE tenant_id = 你的租户id
ORDER BY hold DESC LIMIT 20;
大概率是 schema 或 partition_table 相关模块占满。
-
增大租户 memory_size:80G 对 80 万 partition 偏紧。建议先调到 120G+ 再继续导入,观察是否能跑完。
-
减少单次创建批量:不要一次性 source 全部 DDL,分批执行(比如每批 1 万张),给 OB 内部元数据刷盘的时间。
-
检查
_max_schema_slot_num:控制 schema 缓存槽位数,极端多表场景可能需要调大(需 sys 租户设置)。 -
考虑合并分区策略:20 万表 × 4 分区是否必要?如果部分表数据量小,不分区反而节省元数据内存开销。
建议优先通过增大 memory_size + 分批导入来解决。
感谢分享!
感谢分享!
经验分享很有价值
写得很详细