基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
开启 insertup GTS 优化后并发更新场景误报错误码 4377
更新时间:2026-08-25 08:16
问题现象
在执行包含主表与全局非唯一索引的并发更新操作时,若主表与全局索引位于不同日志流上,且存在一个 insertup 语句因 try insert 冲突而触发后续 delete + insert 操作,系统在查询快照点位于事务提交之后的情况下,仍报错 [errcode=-4377] Fatal Error!!! Catch a defensive error!,表现为日志刷屏 4377 错误。
关键诊断信息
触发条件
- 主表与全局索引位于不同日志流上。
- 存在全局非唯一索引。
- 存在并发事务对同一数据行进行更新,其中包含 insertup 语句。
- insertup 语句的 try insert 阶段发生冲突,产生冲突日志。
- insertup 后续的 update(delete + insert)任务中,主表操作为远程执行。
问题原因
该问题为数据库内核缺陷(By Design)。开启 insertup GTS 优化后,当主表与全局非唯一索引位于不同日志流时,insertup 语句的 try insert 冲突处理与后续 delete + insert 操作可能基于不一致的读快照获取旧数据,触发防御性校验失败,从而误报错误码 4377。
问题的风险及影响
SQL 执行报错 4377、OBServer 防御性错误触发、数据一致性校验误报、潜在的查询结果不一致风险。
影响租户
| sys | MySQL | Oracle |
|---|---|---|
| NO | YES | NO |
影响版本
| 影响版本 | 开始版本 | 修复的 BP 版本 | (区间内)修复的 Hotfix 版本 |
|---|---|---|---|
| 4.3.5 及之后版本 | 4.3.5 | - | - |
解决方法
- 临时应急处理:通过执行
ALTER SYSTEM SET _enable_insertup_replace_gts_opt = false关闭 insertup GTS 优化,避免触发该问题。 - 若问题持续存在,建议在不影响业务的前提下,调整主表与全局索引的部署策略,确保其位于同一日志流上,以规避该场景。
规避方式
- 关闭 GTS 优化。
- 避免在主表与全局非唯一索引位于不同日志流的场景下使用 insertup 语句的 GTS 优化。
- 在高并发更新场景中,避免对同一数据行同时执行 insertup 与并发更新事务。
- 若必须使用 insertup GTS 优化,建议调整主表与全局非唯一索引到同一日志流。