首批通过分布式安全可靠测评,为关键业务系统打造
租户队列积压,线程卡在断连接或申请 DBLink 连接上的原因和解决方法
更新时间:2026-06-03 03:01
本文介绍两个 DBLink 和队列积压相关的问题。
问题现象
租户队列积压,收集 obstack 可以看到有一个线程卡在 OciConnection::close 上,如下图所示。

然后大量线程卡在 Session 断连接或申请 DBLink 连接上。 Session 断连接关键堆栈: clean_dblink_conn。 申请 DBLink 连接关键堆栈: acquire_dblink。
关键信息
一个线程卡在
OciConnection::close上。大量线程卡在断连接或申请 DBLink 连接上。
断连接关键堆栈:
clean_dblink_conn,无论是否使用 DBLink,断开 Session 时都会走到这个路径上。申请 DBLink 连接关键堆栈:
ObOciServerConnectionPool::acquire,只有使用 DBLink 的线程才会走到这个路径上。
问题原因
OceanBase 内核 BUG:表现为 OceanBase 数据库 Oracle 模式租户与原生 Oracle 的 DBLink 连接断开时触发。
如果因为网络原因导致连接卡住,如下二种原因:
持有 DBink 连接池的锁将不会被及时释放。这会导致其他所有试图访问 DBLink 的线程无法获得连接而卡住,最终导致线程资源耗尽,队列积压,使得租户服务不可用。
持有的租户级大锁不会释放,导致所有要断连接的线程都会卡住。
问题的风险及影响
队列积压。
租户服务不可用。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
卡在申请 DBLink 连接上: OceanBase 数据库 V4.2.5 BP1(oceanbase-4.2.5.1-101000182024120722)及之后的版本、V4.2.1 各个版本、V4.3.5 所有版本。
卡在 Session 断连接上: OceanBase 数据库 V4.2.5 BP1(oceanbase-4.2.5.1-101000182024120722)及之后的版本、V4.3.5 所有版本。
解决方法
彻底解决:
升级至包含 DBLink 连接管理问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP11 Hotfix5(oceanbase-4.2.1.11-111050022025071110)、V4.2.5 BP5(oceanbase-4.2.5.5-105000052025070822)及之后的版本、V4.3.5 BP3(oceanbase-4.3.5.3-103000102025071821)及之后的版本。
应急方法:
重启 OBServer 服务。
规避方式
无。