首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 V4.x 版本中建连接报错 4016
更新时间:2026-06-03 03:01
问题现象
在业务频繁建连接断连接场景下,建连接总数达到一定量以后,发生建连接报错 4016。
关键诊断信息
触发条件
一个节点上一个租户创建的连接数累计达到 2147483647 后,建连接报错 4016。
事前巡检
查询每个节点上每个租户当前累计创建的连接数。
obclient> select * from oceanbase.GV$SYSSTAT where name = 'user logons cumulative';检查是否有下面的日志,当建连接数超过 2147483647 / 2 时会打印下面的日志,可以认为是一个告警日志。
[2024-03-22 09:45:55.345741] WDIAG [COMMON] get (ob_link_hashmap.h:313) [2266][T1002_L0_G0][T1002][Y0-0000000000000000-0-0] [lt=0][errcode=0] uref leak check(node->uref_=
事后诊断
查看报错日志如下:
[2024-03-21 14:37:34.479939] WDIAG [COMMON] get (ob_link_hashmap.h:309) [8526][T1002_MysqlQueu][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=21][errcode=-4016] inc ref error(node->uref_=-2147483648, lbt()="0x129db41c 0xe0abedb 0xe078b19 0xe07a40d 0xa175e6e 0x13688db2 0x13682bdf 0x13683e5a 0x136843e9 0x12c963c1 0x12c925e3 0x7f4ea827adc5 0x7f4ea7fa7ced")
[2024-03-21 14:37:34.479957] WDIAG [SQL.SESSION] get_tenant_cur_connections (ob_user_resource_mgr.cpp:183) [8526][T1002_MysqlQueu][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=17][errcode=-4016] get tenant resource failed(ret=-4016)
[2024-03-21 14:37:34.479964] WDIAG [SERVER] verify_connection (obmp_connect.cpp:1867) [8526][T1002_MysqlQueu][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=5][errcode=-4016] fail to get session count(ret=-4016)
[2024-03-21 14:37:34.479969] WDIAG [SERVER] process (obmp_connect.cpp:337) [8526][T1002_MysqlQueu][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=5][errcode=-4016] verify connection fail(ret=-4016)
问题原因
内核 BUG,每建一次连接发生一次引用计数泄漏,当泄漏数达到 2147483647 时,会无法建连接。
问题的风险及影响
业务无法建连接。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V4.1.0 GA(oceanbase-4.1.0.0-100001122023040322)及之后版本、V4.2.0 GA(oceanbase-4.2.0.0-100010082023083014)及之后版本、V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本、V4.2.2 GA(oceanbase-4.2.2.0-100000082024011317)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.1 BP5(oceanbase-4.2.1.5-105000072024041817)、V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)。
连接其他节点,重启报错的节点。
规避方法
巡检当前累计连接数即将达到 2147483647 的节点。
obclient> select * from oceanbase.GV$SYSSTAT where name = 'user logons cumulative';