首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库卡合并报 -4024
更新时间:2026-06-15 09:16
适用版本
OceanBase 数据库 V3.2.4 以前版本。
问题现象
OceanBase 数据库合并失败,报 -4024,详细日志如下。
[2022-11-16 19:48:49.731708] WARN [STORAGE] store_encoding_meta_and_fix_cols (ob_micro_block_encoder.cpp:427) [357551][0][YB420A21DDB6-0005ED950B0D9294-0-0] [lt=5] [dc=0] too big encoding meta(i=10, pos=71653, pos_bak=59634, encoding_meta_offset=152, *encoders_.at(i)={column_index:10, column_type:{type:"VARCHAR2", collation:"gbk_bin", coercibility:"INVALID"}, desc:{need_data_store:false, is_var_data:false, has_null:true, has_nope:false, need_extend_value_bit_store:false, bit_packing_length:0, fix_data_length:0, row_offset:0, row_length:0}, column_header:{type:3, attr:0, extend_value_index:0, offset:59482, length:12019}, extend_value_bit:1})
[2022-11-16 19:48:49.759691] WARN [STORAGE] fill_row_data (ob_micro_block_encoder.cpp:739) [357551][0][YB420A21DDB6-0005ED950B0D9294-0-0] [lt=14] [dc=0] advance buffer failed(ret=-4024, data_buffer={data:0x7f85b9c090d0, pos:2089137, capacity:2097152}, row_size=11914)
[2022-11-16 19:48:49.759705] WARN [STORAGE] build_block (ob_micro_block_encoder.cpp:492) [357551][0][YB420A21DDB6-0005ED950B0D9294-0-0] [lt=12] [dc=0] fill row data failed(ret=-4024)
问题原因
OceanBase 数据库 bug。OceanBase 数据库默认的行列混存编码的压缩方法(encoding)在遇到特殊的数据分布时触发。此场景触发概率不高,多见于测试环境。
解决方法
升级到 OceanBase 数据库 V3.2.4 版本。
应急处理方法
可通过临时关闭分区合并的 encoding 功能绕过问题,具体步骤如下。
登录 SYS 租户,下述操作均在 SYS 租户中进行。
查询当前的版本号信息。
obclient> select zone, name, value from oceanbase.__all_zone where name in ('frozen_version', 'last_merged_version');找出上次合并存在问题的表和分区,其中 xxx 为上次合并的版本。
obclient> select table_id,partition_id from oceanbase.__all_virtual_meta_table where data_version!=xxx;通过应急配置项
_force_skip_encoding_partition_id临时关闭这个分区这次合并的 encoding 功能。obclient> alter system set _force_skip_encoding_partition_id = '0@1100611139453888';重新发起合并。
等版本号成功推高后(合并完成)将配置项修改回默认值。
obclient> alter system set _force_skip_encoding_partition_id = '';