Skip to content

v4.3.5

Latest

Choose a tag to compare

@zhuzhaoyang001 zhuzhaoyang001 released this 15 Aug 07:15
· 0 commits to master since this release

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.logobproxy_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 在执行完请求后就会被释放。

说明

需将配置项 rpc_enable_requestsm_info 设置为 True 才可查询到信息,否则查询结果将为空。

show proxyrpc thread 新增 展示当前线程处理的请求情况。
show proxyrpc requeststat [request_type] 新增 展示不同线程当前处理的各个请求的状态,默认展示所有请求。支持通过配置 request_type 追踪单个类型的请求所处的状态。
show globalsession 新增 展示会话连接池的会话统计信息。
show globalsession attribute [all | '{db_key}'] 新增 展示会话连接池中会话的详细信息,支持通过配置 alldb_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 报错问题。