首批通过分布式安全可靠测评,为关键业务系统打造
自适应连接功能导致 SQL 执行报错 -4016
更新时间:2026-05-14 09:21
问题现象
在执行包含多表连接的 SQL 语句时,系统报错 ORA-00600: internal error code, arguments: -4016, Internal error。
示例如下:
select
distinct D.ARCHIVE_ID AS archiveId,
D.ARCHIVE_CODE AS archiveCode,
trim(D.ARCHIVE_NAME) AS archiveName
from
XXXXXXX_define a,
XXXXXXX_archive_group b,
XXXXXXX_archive c,
XXXXXXX_archive_define d
where
a.XXXXXXX_name = 'xxxxxxxxxx'
and a.XXXXXXX_id = b.XXXXXXX_id
and b.id = c.group_id
and c.archive_id = d.archive_id;
ORA-00600: internal error code, arguments: -4016, Internal error
关键信息
错误日志中可观察到以下关键信息:
[2025-02-19 17:46:44.708176] WDIAG [SQL.ENG] set_sqcs_accessed_location (ob_px_util.cpp:1144) [1552892][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=25][errcode=-4016] we do not find this addr's execution sqc(ret=-4016, n_locations=0, locations.size()=1, sqcs=[{need_report:false, execution_id:144949892, qc_id:1, sqc_id:0, dfo_id:0, need_report:false, exec_addr:"xxx.xxx.xxx.xxx:xxxx", qc_addr:"xxx.xxx.xxx.xxx:xxxx", qc_ch_info:{chid:0, type:0, peer:"0.0.0.0:0", role:0, tenant_id:0, state_:0}, sqc_ch_info:{chid:0, type:0, peer:"0.0.0.0:0", role:0, tenant_id:0, state_:0}, task_count:0, max_task_count:1, min_task_count:1, thread_inited:false, thread_finish:false, px_int_id:{query_interrupt_id:task(1739671166641908,4294969004), px_interrupt_id:task(1739671166641908,4299163320)}, transmit_use_interm_result:false, recieve_use_interm_result:false, serial_receive_channels:[], sqc_order_gi_tasks:false}], locations=[{tablet_id:{id:1152921504606853441}, ls_id:{id:1006}, server:"xxx.xxx.xxx.xxx:xxxx", in_retry:0, partition_id:512856, first_level_part_id:18446744073709551615}])
[2025-02-19 17:46:44.708222] WDIAG [SQL.ENG] set_dfo_accessed_location (ob_px_util.cpp:1049) [1552892][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=44][errcode=-4016] failed to set sqc accessed location(ret=-4016, table_location_key=18446744073709551613, ref_table_id=512856, table_loc={loc_meta:{table_loc_id:18446744073709551613, ref_table_id:512856, related_table_ids:[], use_dist_das:0, select_leader:1, is_dup_table:0, is_weak_read:0, unuse_related_pruning:0, is_external_table:0, route_policy:1}, tablet_locs:[{tablet_id:{id:1152921504606853441}, ls_id:{id:1006}, server:"xxx.xxx.xxx.xxx:xxxx", in_retry:0, partition_id:512856, first_level_part_id:18446744073709551615}], is_writing:0, is_reading:0, need_refresh:0, is_fk_check:0})
问题原因
该问题是由于 OceanBase 数据库内核在 V4.2.5 版本中新实现的自适应连接功能存在缺陷所致。在自适应连接生成时,右表 Location 异常导致了该问题。
问题的风险及影响
SQL 执行报错 -4016,导致包含多表连接的查询语句无法正常执行。
适用版本
OceanBase 数据库 V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)版本。
解决方法
长期解决方法: 升级到问题已修复版本。目前已修复的版本包含 OceanBase 数据库 V4.2.5 BP1(oceanbase-4.2.5.1-101000182024120722)及之后版本。
临时应急方法: 通过设置系统参数
_adaptive_join_enabled = false关闭自适应连接功能,使 SQL 恢复正常执行。-- sys 租户执行 ALTER SYSTEM SET _adaptive_join_enabled = false tenant = all;
规避方式
在 OceanBase 数据库 V4.2.5 BP1(oceanbase-4.2.5.1-101000182024120722)之前的版本中,通过设置配置项
_adaptive_join_enabled = false禁用自适应连接功能,避免触发该问题。避免在右表 Location 不一致的场景下使用可能触发自适应连接的查询语句。