ob租户查询触发器时报错

【 使用环境 】 测试环境
【 OB or 其他组件 】社区版ob4.2.5 mysql租户
【 使用版本 】
【问题描述】
在一个社区版ob4.2.5 mysql租户下执行
show trigeers like '表名’时报错


observer_back.log (114.1 KB)

已经抓到了trace_id
日志在附件

1 个赞

此帖子已被社区举报,现已被临时隐藏。

版本看下

show variables like '%version_comment%'

ob侧已知问题,导致ob创建索引名加上ob自带前缀,导致超过64字节的索引限制,导致show trigger where/like报错Incorrect value

日志中存在长度超限的索引名:__idx_538100_idx_t_point_acct_balance_source_effective_begin_time

select length('__idx_538100_idx_t_point_acct_balance_source_effective_begin_time'); 看下索引长度

规避方式: 修改索引名到正常长度

[2025-08-18 18:22:29.015023] WDIAG [SQL] string_length_check (ob_datum_cast.cpp:11940) [1474206][T1206_L0_G0][T1206][YB42C0A8B43C-00063B9F705EB986-0-0] [lt=13][errcode=-5167] char type length is too long(max_accuracy_len=64, trunc_len_char=65)

[2025-08-18 18:22:29.015071] WDIAG [STORAGE] get_next_row (ob_multiple_merge.cpp:358) [1474206][T1206_L0_G0][T1206][YB42C0A8B43C-00063B9F705EB986-0-0] [lt=2][errcode=-5222] get row from fuse failed(ret=-5222, unprojected_row_={row_flag:{flag:"INSERT", flag_type:0}, trans_id:{txid:0}, scan_index:0, mvcc_row_flag:{first:0, uncommitted:0, shadow:0, compact:0, ghost:0, last:0, reserved:0, flag:0}, snapshot_version:0, fast_filter_skipped:false, have_uncommited_row:false, group_idx:0, count:5, datum_buffer:{capacity:32, datums:0x7f05e7f62810, local_datums:0x7f05e7f62810}, datums:[col_id=0:{len: 8, flag: 0, null: 0, ptr: 0x7f05e7f62820, hex: 0000000000000000, int: 0},col_id=1:{len: 8, flag: 0, null: 0, ptr: 0x7f05e7f62858, hex: F735080000000000, int: 538103},col_id=2:{len: 8, flag: 0, null: 0, ptr: 0x7f05e7f62890, hex: 0000000000000000, int: 0},col_id=3:{len: 65, flag: 0, null: 0, ptr: 0x7f0dab99c70b, hex: 5F5F6964785F3533383130305F6964785F745F706F696E745F616363745F62616C616E63655F736F757263655F6566666563746976655F626567696E5F74696D65, cstr: __idx_538100_idx_t_point_acct_balance_source_effective_begin_time},col_id=4:{len: 8, flag: 0, null: 0, ptr: 0x7f05e7f62900, hex: 0000000000000000, int: 0},]})

该问题是存在索引名长度过64字节导致,这个限制是兼容mysql的。

observer.log.20250819113128427:[2025-08-19 11:31:05.520725] WDIAG [SQL] string_length_check (ob_datum_cast.cpp:11940) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=13][errcode=-5167] char type length is too long(max_accuracy_len=64, trunc_len_char=65)
observer.log.20250819113128427:[2025-08-19 11:31:05.520739] WDIAG [SQL] string_length_check (ob_datum_cast.cpp:11953) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=13][errcode=-5167] string accuracy check failed(cast_ret=-5167, ret=-5167, warning=0, is_oracle=false, meta={type:"VARCHAR", collation:"utf8mb4_general_ci", coercibility:"INVALID"})
observer.log.20250819113128427:[2025-08-19 11:31:05.520747] WDIAG [SQL] eval_param_value (ob_expr.h:1009) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=8][errcode=-5222] evaluate parameter failed(ret=-5222, param_index=0)
observer.log.20250819113128427:[2025-08-19 11:31:05.520751] WDIAG [SQL.ENG] like_varchar (ob_expr_like.cpp:740) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=4][errcode=-5222] eval param value failed(ret=-5222)
observer.log.20250819113128427:[2025-08-19 11:31:05.520753] WDIAG [SQL.ENG] like_varchar (ob_expr_like.cpp:777) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=3][errcode=-5222] failed to eval like varchar(ret=-5222)
observer.log.20250819113128427:[2025-08-19 11:31:05.520756] WDIAG [SQL.ENG] filter_row (ob_operator.cpp:1262) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=2][errcode=-5222] expr evaluate failed(ret=-5222, eval_ctx={batch_idx:0, batch_size:1, max_batch_size:0, frames_:0x7f0f730b3810}, expr=0x7f0aca55c270)
observer.log.20250819113128427:[2025-08-19 11:31:05.520762] WDIAG [STORAGE] check_filtered (ob_multiple_merge.cpp:1072) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=5][errcode=-5222] filter row failed(ret=-5222)
observer.log.20250819113128427:[2025-08-19 11:31:05.520764] WDIAG [STORAGE] process_fuse_row (ob_multiple_merge.cpp:709) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=3][errcode=-5222] fail to check row filtered(ret=-5222)
observer.log.20250819113128427:[2025-08-19 11:31:05.520767] WDIAG [STORAGE] get_next_row (ob_multiple_merge.cpp:358) [748229][T1206_L0_G0][T1206][YB42C0A8B435-00063B9E555D124C-0-0] [lt=2][errcode=-5222] get row from fuse failed(ret=-5222, unprojected_row_={row_flag:{flag:"INSERT", flag_type:0}, trans_id:{txid:0}, scan_index:0, mvcc_row_flag:{first:0, uncommitted:0, shadow:0, compact:0, ghost:0, last:0, reserved:0, flag:0}, snapshot_version:0, fast_filter_skipped:false, have_uncommited_row:false, group_idx:0, count:5, datum_buffer:{capacity:32, datums:0x7f0e9b820fb0, local_datums:0x7f0e9b820fb0}, datums:[col_id=0:{len: 8, flag: 0, null: 0, ptr: 0x7f0e9b820fc0, hex: 0000000000000000, int: 0},col_id=1:{len: 8, flag: 0, null: 0, ptr: 0x7f0e9b820ff8, hex: F735080000000000, int: 538103},col_id=2:{len: 8, flag: 0, null: 0, ptr: 0x7f0e9b821030, hex: 0000000000000000, int: 0},col_id=3:{len: 65, flag: 0, null: 0, ptr: 0x7f0dab99c70b, hex: 5F5F6964785F3533383130305F6964785F745F706F696E745F616363745F62616C616E63655F736F757263655F6566666563746976655F626567696E5F74696D65, cstr: __idx_538100_idx_t_point_acct_balance_source_effective_begin_time},col_id=4:{len: 8, flag: 0, null: 0, ptr: 0x7f0e9b8210a0, hex: 0000000000000000, int: 0},]})

根据日志报错,发现有个65字节长度的超限导致。
char type length is too long(max_accuracy_len=64, trunc_len_char=65)

下面日志打印了对应的hex和超出的字段名称,为一个索引名称,65个字节对上。
hex: 5F5F6964785F3533383130305F6964785F745F706F696E745F616363745F62616C616E63655F736F757263655F6566666563746976655F626567696E5F74696D65, cstr: __idx_538100_idx_t_point_acct_balance_source_effective_begin_time

查看索引信息和判断是否有其他名称超长的索引。
select * from CDB_OB_TABLE_LOCATIONS where table_name=’__idx_538100_idx_t_point_acct_balance_source_effective_begin_time’;

select length(table_name) from CDB_OB_TABLE_LOCATIONS where TABLE_TYPE=‘index’

1 个赞