v4.3.6
V4.3.6
版本信息
| 名称 | 描述 |
|---|---|
| 发布时间 | 2026 年 03 月 03 日 |
| 版本号 | V4.3.6 |
版本定位
ODP V4.3.6 版本是 ODP 4.3.x 的最新长期支持版本(LTS),聚焦稳定性增强与核心能力升级,推荐云上、线下业务用于 POC 测试、生产。在 SQL 代理方面,新增支持 Azure 的 ppv2 协议,提升云环境兼容性;支持打印用户登出日志信息,增强审计能力与运维可观测性;同时,优化了内存管理机制,改进内存碎片处理逻辑,并在内存超限时支持动态调整策略,进一步完善 CRASH 信号拦截行为,显著提升 SQL 代理的运行稳定性。在 RPC 代理方面,新增基于内核反馈的路由优化机制,在路由信息不准时重新路由;支持 HBase put 新协议,提升写入性能;新增 RPC Request 生命周期管控能力,优化重试逻辑和跨分区子请求的处理策略,全面提升 RPC 代理的可靠性和性能。
关键特性说明
SQL 代理
连接管理
在 Azure 的 ppv2 协议下,使用 PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID 映射成租户信息,新版本 ODP 支持解析该字段完成映射,以支持 Azure下的 pptv2 协议。
稳定性提升
-
内存优化
系统梳理 ODP 内存管理模块的问题和优化点,在 LTS 版本进行优化,提升内存稳定性,主要涉及内容:
-
优化容易引起内存碎片的 PS 模块内存使用,避免内存碎片导致的内存放大和回收缓慢问题。
-
在内存超限场景下,支持通过信号方式,动态调大 ODP 的内存上限,以避免内存超限时,无法增加导致内存告警及新建连接失败的问题。
-
-
优化 CRASH 信号拦截行为
通过
enable_crash_error_log配置项优化 CRASH 信号拦截配置,默认为True,允许进行 CRASH 信号拦截,打印堆栈信息,配置项支持动态修改。
易用性提升
ODP V4.3.6 支持打印用户登出日志信息。ODP 具有连接诊断能力,会将用户的登录信息、异常断连接信息输出到 obproxy_diagnosis.log 日志文件中,但是缺少登出信息记录。新版本将用户正常退出(COM_QUIT)信息也打印在日志中,并统一了断连日志格式,给用户提供完整、易用的登录登出审计能力。
RPC 代理
路由能力完善
ODP V4.3.6 支持在路由信息不准时,根据 OceanBase 数据库反馈给 ODP 的信息重新路由。OceanBase 数据库支持分布式能力,即使路由错误也会通过 RPC 远程调用成功执行,但是 ODP 没有收到反馈不会刷新缓存,这样导致一直产生 RPC 远程消耗导致性能下降。为了解决此问题,ODP 在开启分布式路由能力后,需要填充 tablet_id,同时客户端需要增加 option_flag 字段,OceanBase 数据库根据 option_flag 以及 tablet_id 共同判断是否开启分布式能力。
连接管理
ODP V4.3.6 支持 HBase put 新协议。ODP HBase 场景下写入性能较差,经过分析发现,OBKV 层大部分的开销在于协议解析、路由计算以及数据在模型层和 TableAPI 层之间的转换。HBase put 操作的数据格式相对固定,操作逻辑也相对简单,没有过多的计算。因此,新版本在 OBKV 框架上开辟一条针对 put 操作的快速路径,去掉中间各个层级的转换开销,做到协议解析完后即刻写入,以此提升写入的性能。
稳定性提升
-
增加 RPC Request 生命周期管控
RPC Request 主要包含
client_net_handler、request_sm和server_net_handler三个模块的处理逻辑,ODP 给这三个模块都设置了STATE,只有三个状态都满足释放条件的时候,请求才可以被释放。如果STATE因与 OceanBase 数据库交互异常导致不满足条件,请求会长时间在内存中等待定时任务触发,占用内存比较久。新版本增加 PRC Request 生命周期管控能力,解决上述问题。 -
优化 RPC Request 重试逻辑
ODP 在表 Schema 发生变化时(比如 truncate 表),需要异步刷新 Location Cache,刷新期间仍然会使用旧的缓存,这会导致一系列重试问题:频繁重试需要发送到 OBServer 节点浪费资源、重试太快可能缓存还没有刷新成功就重试结束导致请求仍然报错、子请求重试时限制了
tablet_id的重新计算导致重试失败。新版本改进了重试流程,优化了重试逻辑,以解决上述缓存过期导致的问题。 -
优化 OBKV 跨分区子请求的处理策略
ODP 接收请求,计算 RPC 可能涉及所有子分区。对于跨分区请求,ODP 采用拆分模式处理,在异常场景下,父请求的任务与每个子请求的
sub_request_sm耦合,可能会导致一些稳定性问题。新版本对父子请求、状态机解耦合,彼此互不感知,调用链简单清晰,性能高并且具有较好的稳定性,出问题也容易排查定位。
易用性提升
ODP V4.3.6 控制子请求打印 Slow RPC Query 和 obproxy_digest 日志。RPC 请求在打印 slow 和 digest 日志时忽略子请求的打印,但子请求也是完整的 RPC 请求,也需要慢日志进行跟踪。为了避免子请求过多,打印过多消耗性能,新增 rpc_enable_sub_req_log 配置项来控制打印行为。
兼容性变更
配置项变更
| 配置项 | 变更类型 | 变更说明 |
|---|---|---|
| connection_diagnosis_option | 变更 | 新增第三个 bit 位表示是否打印正常登录或登出日志,并将默认值由 3 更新为 7。注意在大量短连接的场景下,打印登录、登出日志,可能会造成最大 4% 的性能下降。在短连接性能敏感的场景,可以设置 |
| enable_crash_error_log | 变更 | 修改生效方式由重启 ODP 生效变更为动态生效。 |
| rpc_enable_sub_req_log | 新增 | 控制是否在 obproxy_slow.log 和 obproxy_digest.log 日志中打印满足打印条件的 OBKV 子请求日志。 |
支持的 OceanBase 数据库版本
支持 OceanBase 数据库 4.x 和 3.x 以及更低版本。根据使用的 OceanBase 数据库版本不同,对应推荐如下:
-
当 OceanBase 数据库为 3.x 版本及更低版本时,建议使用 ODP 3.x 版本
-
当 OceanBase 数据库为 4.x 版本时,推荐使用 V4.3.6 最新版本(LTS 版本)。
已知问题
开启全局唯一 Client Session ID(client_session_id_version=2)的长稳集群(运行时间超过 7 天),可能会出现建连失败的现象。推荐业务升级到修复此问题的最新版本。
缺陷修复
-
修复文本 ps prepare 场景下,ODP 内存使用超过 90%,断开连接后,ODP 内存释放慢的问题。
-
修复
/etc/hosts里没有配置 IP hostname,导致 ODP 启动失败的问题。 -
修复使用
service_name登录的场景下,odp_current_session监控项出现负数,导致 OCP 报警连接数超过限制的问题。 -
修复使用
COM_RESET_CONNECTION或者COM_CHANGE_USR的场景下,系统变量或者用户变量同步时 ODP 内存泄露的问题。 -
修复 getaddrinfo 系统调用返回超过 64 个 IP 时,存储 IP 的数组越界导致内存异常 ODP Core 的问题。
-
修复列名包含
#字符的 DML 语句路由不准的问题。 -
修复调整
digest_sql_length长度后,由于栈大小不足,内存越界导致的 ODP Core 问题。 -
修复 ODP 一次发送多个请求时,由于请求发送时间比较长,OceanBase 数据库处理请求速度比较快,导致 ODP 没有正确处理 OceanBase 数据库回包导致客户端卡住的问题。
-
修复 SQL 请求中包含
status关键字导致的 ODP Core 问题。 -
修复使用
service_name连接并且 SQL 请求长度超过 16MB 时,ODP 解析请求夯住的问题。 -
修复开启内存泄露诊断的场景下,
show proxymemory objpool;命令固定 30s 超时,无法修改,导致看不到具体的show proxymemory objpool;信息,无法有效诊断内存泄露原因的问题。 -
修复 ODP 解析
round(9.99,-9.9)、round(9.99,-10)和round(99.99,-20)表达式遇到栈溢出导致的 Core 问题。 -
修复 ODP 解析非分区表请求时遇到 OB_SCHEMA_ERROR 信息,ODP 重试时将其作为单分区表路由,获取 part info 时为空导致的 Core 问题。
-
修复超过 request buf len 的大请求执行同时进行 xa_start 变量同步导致的 ODP Core 问题。
-
修复 ODP 内存超限时,proxysys 租户无法建立连接的问题。
-
修复多列分区表场景下,ODP 获取分区信息失败导致路由不准的问题。
-
修复分区分裂后 ODP 获取
tablet_id信息超过重试次数导致报错 4016 的问题。 -
修复 PS close 或 reset 时,session 信息没有同步导致的报错问题。
-
修复请求执行过程中发生 truncate 表,路由信息发生变化,ODP 重试过程时缓存还没有更新成功导致的报错问题。
-
修复开启分布式路由能力后,再次关闭,偶现线程缓存没有清理导致关闭失败的问题。
-
修复 OceanBase 数据库因为内存等问题无法响应结果,ODP 侧因为内存分配受限无法读取到后端的结果,导致分区子请求的请求无法被清理,进而导致请求内存无法被回收的问题。
-
修复跨分区请求执行过程中 truncate table 导致的
4016报错问题。 -
修复
rpc_enable_congestion关闭场景下,隔离 RPC 端口,超过 2min 性能未恢复的问题。 -
修复
rpc_enable_congestion关闭场景下,节点下线报错4016超过 2 分钟无法恢复的问题。 -
修复单分区表路由场景下,获取
table_entry时part_num为 0,可能存在的内存泄漏问题。 -
修复 PS close 语句,在 session 状态同步时,OceanBase 数据库返回事务是否结束的标记不准,导致 ODP 错认为事务已经结束导致的
4016报错问题。