OceanBase 数据库代理社区版 V4.3.5
V4.3.5
版本信息
| 名称 | 描述 |
|---|---|
| 发布时间 | 2025 年 08 月 15 日 |
| 版本号 | V4.3.5 |
版本定位
ODP 4.3.5 版本是 ODP 4.3.x 的最新版本,推荐线下业务用于 POC 测试、生产。新增支持 String 类型路由、分区键的列等值关系推导、multi-stmt 事务路由、month 函数路由等功能,增强核心路由能力;支持会话连接池,提升短连接场景的路由性能;细化最大连接数超限时的错误日志,提升诊断易用性。RPC 代理,优化单分区表的判断逻辑,增强 OBKV 场景的路由准确性,新增多个 show 命令展示对象信息,完善监控能力,提升运维易用性。
关键特性说明
SQL 代理
路由能力完善
-
String 类型路由
OceanBase 数据库新增 String 类型,支持 key、range columns、list columns 分区方式,ODP V4.3.5 同步支持 String 类型的准确路由。
-
分区键的列等值关系推导
ODP 解析 SQL 获取路由信息,仅支持
C1 = xxx(C1 为分区键)这类分区条件,无法正确解析C1 = C2 and C2 = xxx等需要推导列等值关系的条件,只能随机路由。ODP V4.3.5 版本,支持分区键的列等值关系推导能力,对C1 = C2 and C2 = xxx这类语句,也能够正确地获取分区键值并计算出分区,实现准确路由。 -
Multi-stmt 事务路由
对 Begin/Start transaction 开启的 multi-stmt 事务语句(类似
begin; xx; xx; commit),支持按照第一条 SQL 语句路由。 -
Month 函数路由
ODP V4.3.4 支持了建表语句分区键为函数表达式的场景,能够识别分区表的建表信息,对存在函数表达式的分区键进行解析转换,保证分区计算的准确性。在此基础上,ODP V4.3.5 新增了 month 函数的准确路由。
-
优化 hint 解析失败后的路由逻辑
SQL 中有含有诸如
/*+index(db.lna_n_biz_lock_080 primary) */等的复杂 hint 时,ODP 无法正确解析到路由信息,会出现路由不准的问题。ODP V4.3.5 版本优化了对含有复杂 hint SQL 的解析逻辑,能够跳过 hint 继续解析分区信息,实现 SQL 请求的准确路由。
会话连接池
ODP 作为 OceanBase 数据库的高性能代理,在长连接业务场景下,路由性能优异。在短连接场景,性能较差,主要原因有两点:
-
ODP 与 OBServer 节点频繁新建、关闭 TCP。
-
ODP 切换 OBServer 节点路由时的 Database、System Vars 同步。
为了提升短连接场景的路由性能,ODP V4.3.5 版本新支持会话级连接池能力,不仅能减少短连接场景下的 accept 等系统调用次数,还可以降低频繁建连的延迟,最终实现性能优化。
易用性提升
OceanBase 数据库可以通过不同配置项和系统变量来控制租户的最大连接数,当最大连接数超限时,ODP 的报错日志都是 too many connections,通过这个报错信息,无法准确定位是哪个配置项超限。ODP V4.3.5 在诊断日志 obproxy_diagnosis.log 和 obproxy_error.log 中对错误日志进行细化、区分,提升诊断易用性。
RPC 代理
内部对象运维命令
ODP RPC 代理在处理请求路由时会涉及许多内部缓存,缓存过期或者存储的内容不正确时会造成各种异常稳定性问题,而通过日志排查这些内部对象的方式比较耗时,且不适合在生产环境使用。ODP V4.3.5 将 OBKV 常用的 rpcRequest、tabletGroup、globalIndex、QuerySync、TabletLS、Ctx 信息等对象信息通过 show 命令进行展示,提升运维易用性。
易用性提升
在 Prometheus 端口增加 RPC 连接信息、net_entry 等统计项,完善 ODP RPC 代理的监控能力。
优化单分区表的判断逻辑
ODP 是根据 part_num = 1 来判断一张表为非分区表或者单分区表,但无法识别具体是单分区表还是非分区表。分区分裂场景下,默认创建的表都是单分区表,但是 ODP 可能会认为是非分区表。非分区表和单分区表的 tablet_id 是不同的,对于 OBKV 场景,如果没有填充合适的 tablet_id(非分区表默认为 0),OceanBase 数据库会报错。ODP V4.3.5 对单分区表的判断逻辑进行优化,在单分区表被判定表为非分区表时,根据 OceanBase 数据库返回的 OB_SCHEMA_ERROR 信息进行重试,改为按照单分区表进行路由。
兼容性变更
运维命令变更
| 运维命令 | 变更类型 | 变更说明 |
|---|---|---|
| show proxyroute partition | 新增 | 展示 Partition 的相关信息,支持手动清理。 |
| show proxyroute globalindex | 新增 | 展示 ODP 中的 OBKV 全局索引信息,支持手动清理。 |
| show proxyroute tablegroup | 新增 | 展示多列族请求的相关信息,支持手动清理。 |
| show proxyroute queryasync | 新增 | 展示 ODP 中 OBKV 异步查询的相关信息,支持手动清理。 |
| show proxyroute tabletls [tablet_to_ls_num] | 新增 | 展示 ls_id 信息,目前仅展示支持 LSOp 请求,支持手动清理。tablet_to_ls_num 用于设置展示的数据数量 |
| show proxyroute rpcctx | 新增 | 展示 ODP 中通过 RPC 端口登录的用户信息,不支持手动清理。可通过该命令验证 ODP 对登录用户是否支持分布式能力。 |
| show proxysm rpc [sm_id] | 新增 | 展示 ODP 中当前还未被释放的 ObRpcRequestSM 所处的状态,支持通过配置 sm_id 展示指定 ObRpcRequestSM 所处的状态。ObRpcRequestSM 在执行完请求后就会被释放。说明需将配置项 |
| show proxyrpc thread | 新增 | 展示当前线程处理的请求情况。 |
| show proxyrpc requeststat [request_type] | 新增 | 展示不同线程当前处理的各个请求的状态,默认展示所有请求。支持通过配置 request_type 追踪单个类型的请求所处的状态。 |
| show globalsession | 新增 | 展示会话连接池的会话统计信息。 |
| show globalsession attribute [all | '{db_key}'] | 新增 | 展示会话连接池中会话的详细信息,支持通过配置 all 或 db_key 查询所有或指定租户的会话信息。 |
| kill globalsession 'dbkey' [ss_id] | 新增 | 终止会话连接池中的会话。 |
配置项变更
| 配置项 | 变更类型 | 变更说明 |
|---|---|---|
| connection_pool_mode | 新增 | 用于控制是否启用连接池功能,目前仅支持配置启用会话级连接池。 |
| session_pool_idle_timeout | 新增 | 用于设置会话空闲超时时间,即会话被放回连接池后可以保留的最大时长。 |
| session_pool_reset_interval | 新增 | 用于设置向连接池中未重置的会话发送 COM_RESET_CONNECTION 的时间间隔。重置完成后,ODP 不会再向已重置过的会话发送 COM_RESET_CONNECTION。 |
| session_pool_stat_log_interval | 新增 | 用于设置会话连接池统计日志时间间隔。 |
| rpc_enable_requestsm_info | 新增 | 用于控制是否打印 RPC 请求信息。 |
支持的 OceanBase 数据库版本
支持 OceanBase 数据库 4.x 和 3.x 以及更低版本。根据使用的 OceanBase 数据库版本不同,对应推荐如下:
-
当 OceanBase 数据库为 3.x 版本及更低版本时,建议使用 ODP V3.2.11。
-
当 OceanBase 数据库为 4.x 版本时,推荐使用 ODP V4.3.1(LTS 版本)。
ODP V4.3.5 支持多项新功能,如果用户环境依赖新功能,推荐使用最新版本 V4.3.5;若不依赖新功能,推荐使用 LTS 版本 V4.3.1。
缺陷修复
-
修复 ODP 处理 OBServer 节点回包时遇到内存不足的异常,触发连接清理导致的 core 问题。
-
修复数据库删表重建同名不同分区类型表后,插入数据报
-4002错误的问题。 -
修复 SQLMonitorInfo 模块存在内存泄露的问题。
-
修复 Range 分区表,改变分区结构后查询报错
4723的问题。 -
修复 OBI 实例 DROP 后,下游请求的长连接未释放的问题。
-
修复 ODP 热升级失败的问题。
-
修复指定 Zone 路由场景下,切换指定 Zone 时,因租户无流量,缓存未更新,导致路由不到新 Zone 的问题。
-
修复只读地址指定按副本路由,对指定的 Zone 进行机器替换后,新上线机器被拉黑无法洗白的问题。
-
修复通过 LSOP 构建 batch tableQuery 的场景下,获取全部的列,并且拆解到多个 LSOP 请求下发到不同的日志流场景时,getOperationRow 报错问题。
-
修复 go 客户端,通过 ODP 连接时,TestPrimaryAndGlobalIndexNoPartition 查询数据报
-4016的问题。 -
修复 OB_RPC_TABLE_IGNORE_FIELD 内存使用过大的问题。
-
修复 OBServer 节点出现异常无法返回结果时,ODP 内存分配受限无法读取到后端结果,导致分区子请求的请求无法被清理,进而导致请求占用内存无法被回收的问题。
-
修复二合一写一下,OBServer 节点回包不符合规范时,ODP 未拦截异常结果导致的 core 问题。
-
修复 OceanBase 2.0 协议下,ODP 内存分配失败后,协议解析失败误用 MySQL 协议,导致的
-4103报错问题。 -
修复建连白名单校验失败时,诊断日志未及时记录的问题。
-
修复分区分裂场景下,非分区表分裂为分区表后,ODP 识别表类型不准导致的
-4002报错问题。