基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
OceanBase 数据库 V4.2.1 版本中创建索引失败报错 -4184 的原因和解决方法
更新时间:2026-05-22 08:56
问题现象
OceanBase 数据库 V4.2.1 版本在磁盘水位不高的情况下创建索引报错 ORA-00600: internal error code, arguments: -4184, Server out of disk space。
关键日志信息显示 fail to write tmp block(ret=-4184。
[2024-09-25 15:36:59.397481] WDIAG [STORAGE] wash_block (ob_tmp_file_cache.cpp:1347) [1059902][T1008_PX_G0][T1008][xxxxx-xxxxx-xxxxx-xxxxx] [lt=14][errcode=-4184] fail to write tmp block(ret=-4184, tenant_id=1008, info={block_id:29338802, offset:0, size:2064384, tenant_id:1008, macro_block_id:[9223372036854775807](ver=0,mode=0,seq=0), buf:0x7fa3870000f0, io_desc:{mode:"READ", group_id_:0, wait_event_id_:12, is_sync_:false, is_unlimited_:false, reserved_:0, is_detect_:false, is_time_detect_:false}}, *m_blk={buffer:0x7fa3870000f0, page_buddy:{page_nums:4{{start_page_id:248, end_page_id:252}}}, handle:{value:0x7fa3870000d8, inst_handle:{inst:{cache_id:11, tenant_id:1008, is_delete:false, status:{config:0x55b09dff0df0, kv_cnt:11566, store_size:6702153728, map_size:12478464, lru_mb_cnt:3220, lfu_mb_cnt:1, base_mb_score:"2.470328229206232721e-323", hold_size:0}, ref_cnt:753}}, kvpair:0x7fa3870000a8, handle:{mb_handle:0x7fbd5ab09af0}}, macro_block_handle:{macro_id:[9223372036854775807](ver=0,mode=0,seq=0), io_handle:{io_request:"NULL"}}, tmp_file_header:{version:1, magic:20720, block_id:29338802, dir_id:222591430, tenant_id:1008, free_page_nums:4}, io_desc:{mode:"READ", group_id_:0, wait_event_id_:12, is_sync_:false, is_unlimited_:false, reserved_:0, is_detect_:false, is_time_detect_:false}, block_status:1, is_inited:true, alloc_time:1727249812548696, access_time:1727249812599837})
如果出现如上关键日志,即可认为建索引期间写临时文件时空间不足。
问题原因
索引失败的原因为有一个节点磁盘空间快速被占满,建索引期间要写临时文件(需要进行文件排序)所需空间很大,甚至可以达到主表大小的数倍,建立索引期间磁盘占用膨胀,直到无法承载临时文件,导致创建失败。
执行过程中,主要是排序的中间结果落盘到临时文件占用空间大。而且 OceanBase 数据库 V4.x 版本比 V3.x 版本会膨胀更多,这是因为对于局部索引 V3.x 版本是逐个分区执行,而 V4.2.1 版本是整张表的放大收缩。在 V4.2.3 版本中引入了 DDL 路径上的数据压缩,可以较好的缓解此问题。
问题的风险及影响
创建索引失败,且期间磁盘空间快速上涨至停写水位(默认 90% ),此节点可能发生短暂停写或数据备份失败。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.3(oceanbase-4.2.3.0-100000052024041220)版本。
规避方式:
先对空表创建索引,创建索引完成后再导入数据。