---
title: 自适应连接功能导致 SQL 执行报错 -4016-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 自适应连接功能导致 SQL 执行报错 -4016相关的常见问题和使用技巧，帮助您快速解决 自适应连接功能导致 SQL 执行报错 -4016的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 自适应连接功能导致 SQL 执行报错 -4016

更新时间：2026-05-14 09:21

适用版本： V4.2.x 内容类型：Troubleshoot  

## 问题现象

在执行包含多表连接的 SQL 语句时，系统报错 `ORA-00600: internal error code, arguments: -4016, Internal error`。

示例如下：

```sql
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

```

## 关键信息

错误日志中可观察到以下关键信息：

```shell
[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 恢复正常执行。

  ```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 不一致的场景下使用可能触发自适应连接的查询语句。

上一篇

[Runtime Filter 特性引入的估行不准计划走偏的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003149607)

下一篇

[CTE 计划下 SEMI JOIN 改写为 INNER JOIN 失败导致计划走偏的原因及解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003272412) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
