首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库代理社区版 V4.3.4
更新时间:2026-04-14 17:41:11
V4.3.4
版本信息
发布时间:2025 年 04 月 25 日
版本号:V4.3.4
RPM 版本号:obproxy-ce-4.3.4.0-1
版本定位
ODP 4.3.4 版本是 ODP 4.3.x 的最新版本,推荐云上、线下业务用于 POC 测试、生产。SQL 代理,新支持亚洲字符集、字符序的路由,支持函数作为分区键的路由,增强了核心路由能力,优化复制表场景和超过 4K 请求场景的路由策略,减少远程路由,提升路由性能,统一 ODP 与 OceanBase 数据库间协议的全局配置项,提升协议配置易用性。RPC 代理,支持单分区表准确路由和分区信息原子性获取,增强了路由能力,完善支持 congestion 处理流程,异步化处理 ODP ls_id 信息的获取,进一步提升系统稳定性。
关键特性说明
SQL 代理
路由能力完善
字符集扩展
全面兼容亚洲字符集,包括 ujis、euckr、cp932 和 eucjpms 等字符集及其对应的字符序。
复制表参与 JOIN 的场景路由优化
ODP 对复制表的路由策略是将请求随机路由到任一 OBServer 节点。如果复制表是 JOIN 的第一张表,按照随机路由策略,可能会将请求路由到非复制表的非 Leader 节点,发生远程路由,影响请求整体性能。ODP V4.3.4 对复制表参与 JOIN 的场景进行优化,调整路由策略为:ODP 识别到 JOIN 的第一张表为复制表时,不进行随机路由,而是使用 JOIN 后的表进行路由,从而缓解远程路由导致的性能问题。
支持函数作为分区键路由
ODP 分区计算,未支持建表时使用函数表达式作为分区键的场景,会导致分区计算失败,路由不准。ODP V4.3.4 对此场景进行完善,识别分区表元信息的建表信息,对存在函数表达式的分区键进行解析转换,保证分区计算的准确性。
超过 4K 的请求路由
ODP V4.3.4 之前版本,
request_buffer_length默认值为4KB,对超过 4KB 且还没有解析到路由信息的请求,ODP 会因解析失败选择随机路由,可能会导致远程路由,对性能影响较大。业务中多次遇到此问题,因此 ODP V4.3.4 将request_buffer_length配置项默认值由4KB调大到8KB,以确保超过 4KB 的请求也能准确路由。
协议配置易用性
ODP 有两个配置项控制 ODP 与 OceanBase 数据库之间的协议:enable_ob_protocol_v2 和 enable_compression_protocol。在 ODP V4.3.1 支持单机模式性能优化后,ODP 与 OceanBase 数据库之间的协议改为自适应,不由配置项控制,实际使用的协议类型和配置项的值不一定完全一致,这导致在运维排查问题时,没有有效准确的手段确认目前使用的协议类型,增加排查问题难度。ODP V4.3.4 新增全局配置项 server_protocol,明确 ODP 与 OceanBase 数据库之间的协议,来提升协议配置的易用性。
RPC 代理
路由能力完善
支持单分区表准确路由
ODP 无法准确判断表是分区表还是非分区表,单分区表场景,走 RPC 代理路由时,有可能会遇到路由报错情况。ODP V4.3.4 优化逻辑,根据 OBServer 节点反馈错误信息进行路由重试,以支持单分区表的准确路由。
分区信息获取保证原子性
ODP 获取表信息是通过多条内部请求实现,请求间没有原子性,不能保证表信息的一致性。如果出现不一致,则计算分区会失败。ODP V4.3.4 优化逻辑,对获取的表信息增加实时校验以及重试,保证路由的准确性。
完善支持 congestion 处理流程
ODP RPC 代理,支持异步处理 RPC request 对象,处理过程中会将请求处理状态机和 OBServer 节点 Net 隔离开,OBServer 节点的状态变化和 congestion 处理流程相对独立。OBKV 请求严格依赖当前计算出的分区信息以及对应的路由信息转发处理 SQL,高可用能力不完善,需要借鉴 ODP SQL 代理的策略,对 congestion 的处理流程可确保在任意情况下,都不会将请求转发到异常 OBServer 节点。
异步化处理 ODP ls_id 信息的获取
ODP V4.3.1 开始获取 ls_id 信息,同步依赖 tablet_id 的获取,导致整体的 SQL 处理相对比较复杂,且因为需要查询集群内部表,增加了对 OceanBase 集群 sys 租户的压力。为解决此问题,ODP V4.3.4 将 ls_id 的获取过程进行异步化拆解,对于 LSOP 请求增加异步化获取 tablet_id 的处理步骤。
兼容性变更
| 配置项 | 变更类型 | 变更说明 |
|---|---|---|
| server_protocol | 新增 | 用于控制 ODP 与 OceanBase 数据库之间的协议类型。 |
| rpc_client_net_read_timeout | 新增 | 用于设置 RPC 客户端网络读取超时阈值。 |
| rpc_client_net_write_timeout | 新增 | 用于设置 RPC 客户端网络写入超时阈值。 |
| request_buffer_length | 变更 | 默认值由 4KB 更新为 8KB,并扩展功能:当请求大小超过配置项设置阈值时,ODP 直接使用 tunnel 流式转发客户端请求。 |
| tunnel_request_size_threshold | 废弃 | 该配置项从 V4.3.4 版本开始废弃,功能改由 request_buffer_length 代替。 |
支持的 OceanBase 数据库版本
支持 OceanBase 数据库 4.x 和 3.x 以及更低版本。根据使用的 OceanBase 数据库版本不同,对应推荐如下:
当 OceanBase 数据库为 3.x 版本及更低版本时,建议使用 ODP 3.x 版本。
当 OceanBase 数据库为 4.x 版本时,推荐使用 ODP V4.3.4。
缺陷修复
修复 ODP 在 AWS 上只读地址连接不准确及卡断的问题。
修复注释 '--' 并换行场景下,ODP 对 '--' 后的 SQL 解析失败的问题。
修复 DBMS_LOB.READ 超时,业务报错
write clob error的问题。修复 ARM 下,ODP 使用 ipv6 方式启动失败的问题。
修复分区表分区键缺失的场景下,存在 default 分区时,SQL 请求没有按预期随机打散的问题。
修复旁路导入使用 ODP 连接集群时,参数写错时报
4016错误的问题。修复用户变量中包含
value等关键词时,PS 路由不准确的问题。修复事务中大于 4k 的请求在解析重试时断连接的问题。
修复关闭 OceanBase 2.0 协议和压缩协议时,PS 协议下未返回结果的问题。
修复 sys 租户下执行
kill query sessionid,无法终止业务租户下执行的 SQL 的问题。修复 WHERE 条件的字符串值中存在
join关键字,导致分区信息解析错误,路由不准的问题。修复 RPC 代理,单分区表插入数据报错
4016的问题。修复手动分区分裂场景下,ODP 报错
-5627的问题。修复 batch insert 压测初始阶段,大量报错
routed to the wrong server的问题。修复重启节点后,客户端断连报错问题。
修复 ycsb 工具执行 batch checkAndInsUp 操作客户端,报
unknown errcode: -10652的问题。修复用全局索引查询,报
OB_ERR_KV_GLOBAL_INDEX_ROUTE的问题。修复迁移后全局索引在 ODP 报错
-5150,导致客户端不断 Reconnect 报错的问题。