【 使用环境 】测试环境
【 OB or 其他组件 】oceanbase 4.3.5 bp2 hf1
【 使用版本 】OceanBase 构建版本号:4.3.5.2-102010012025052715
【问题描述】
执行存储过程出现“4016 Internal error”
烦请协助定位,感谢。
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
2 个赞
论坛小助手
#3
根因分析场景: 事务其他错误
根因分析命令: obdiag rca run --scene=transaction_other_error
日志采集场景: SQL 执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
推荐使用 obdiag 工具进行根因分析和日志采集,以便确认问题所在。上述命令将帮助您定位存储过程执行时出现的错误代码 4016 Internal error 的具体原因。
为了更好地帮助您解决问题,请您提供以下信息:
- 出现错误时的具体 SQL 或存储过程内容是什么?是否可以提供简化版的可复现案例?
- 错误发生时是否有其他异常现象,例如高负载、磁盘空间不足或网络波动?
- 是否可以通过
trace_id
定位到具体的错误日志?如果有,请提供 trace_id
的值以便更精确地采集日志。
- 当前 OceanBase 集群的部署模式是通过 OCP、OBD 还是手工部署的?
- 是否有定期维护计划(如合并或备份),错误发生时是否与这些操作重叠?
附上敏捷诊断工具 obdiag 使用帮助链接
2 个赞
淇铭
#4
看着像是语句执行报错呀 看看存储过程的语句 写的是否有问题
存储过程 可以多写几个输出的语句 看看那里有问题
2 个赞
没有问题,我们在另外一个同样版本的环境测试了。
因为报的是 “4016 Internal error”感觉有一些奇怪。
1 个赞
论坛小助手
#7
根据文档库中的信息,错误码 4016 Internal error
表示 OceanBase 数据库内部发生了某种异常。虽然目前没有明确的文档片段直接描述该错误的具体原因,但以下几点可以帮助您进一步定位问题:
1. 使用 obdiag 工具
2. 检查存储过程逻辑
- 错误可能与存储过程本身的逻辑有关。建议您检查存储过程
sp_dm_bi_satp_csfk_ycsj_pth_mkz_inc
的实现,尤其是以下方面:
- 是否存在对不存在的对象(如表、视图)的引用。
- 是否有复杂的递归调用或嵌套事务。
- 是否涉及大量数据操作,可能导致资源耗尽。
3. 验证环境差异
- 您提到在另一个相同版本的环境中测试未出现问题,这表明可能是当前环境的某些配置或状态导致了问题。可以对比两个环境的以下内容:
- 租户资源限制(内存、CPU 等)。
- 数据分布和分区情况。
- 系统参数配置(如
enable_internal_calculation
等)。
4. 检查系统日志
5. 联系技术支持
- 如果通过上述方法仍无法定位问题,建议将采集到的日志和相关信息提交给 OceanBase 技术支持团队,他们可以根据内部实现进一步排查。
总结:
您的问题可能存在误解,实际上据我所知,4016 Internal error
是一个较为通用的内部错误提示,具体原因需要结合日志和上下文分析。如果问题仍然无法解决,建议按照上述步骤进一步排查或联系官方支持团队。
详情请参考:
- 4000 ~ 4499
- 系统内存不足/泄漏
- 4500 ~ 4999
- 数据备份失败
- 内存相关问题
- 9500 ~ 9999
- 其他硬件&网络相关问题
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
1 个赞
这个错误就是语句的问题! 但没有定位到那一句,所以也不好排查。如下个人经验,参考一下!
- 在linux shell 通过cat 查看文本,并复制语句到目标中就出现这个报错。处理办法,将文本导出到windows 桌面,用notepad++等工具打开,复制粘贴到目标库中试一试!
1 个赞
淇铭
#9
是否有trace_id信息 如果有可以根据trace_id搜一下 observer.log的日志
alter system set enable_rich_error_msg=true;
obclient [test]> select count(*) from t2;
ERROR 1146 (42S02): Table ‘test.t2’ doesn’t exist
[xx.xx.xx.1:2882] [2024-04-13 20:10:20.292087] [YB420BA1CC68-000615A0A8EA5E38-0-0]
[root@x.x.x.1 ~]$ grep “YB420BA1CC68-000615A0A8EA5E38-0-0” rootservice.log
[root@x.x.x.1 ~]$ grep “YB420BA1CC68-000615A0A8EA5E38-0-0” observer.log
alter system set enable_rich_error_msg=false;
你可以按照这个步骤 找一下日志