• 支持从 V4.2.5_CE/V4.2.5_CE BP1~BP6 升级到 V4.2.5_CE BP7,再升级到 V4.4.2_CE BP1。
  • 支持从 V4.3.5_CE/V4.3.5_CE BP1~BP5 升级到 V4.3.5_CE BP6,再升级到 V4.4.2_CE BP1。
  • 支持从 V4.4.1_CE 升级到 V4.4.2_CE BP1。
  • 支持主备库强同步(RPO=0)(最大保护模式和最大可用模式)【实验特性】

  • 最大保护模式:最高级别的数据保护,可确保主库故障时不丢数据。在该模式下,事务需等待 REDO 日志在主库和强同步备库均持久化成功后才能提交;备库不可用时主库停止写服务。
  • 最大可用模式:在集群可用性不受损前提下提供高等级数据保护。主备库均正常时,事务需等待主库和强同步备库同时持久化后提交;主备链路故障时,一旦主备位点差距超过 NET_TIMEOUT (默认 30 s),主库自动将强同步降级为异步以优先恢复服务;当主备链路恢复且落后时间持续小于 HEALTH_CHECK_TIME (默认 60 s)后自动回切强同步。
  • 支持 Zone 级表组(TableGroup)

    Zone 级表组支持将相关分区按规则聚集在同一个 Zone 内,并使表组内分区 Leader 均匀分布在 Zone 内不同 OBServer 上。解决现有表组 Sharding = None 因为数据总量过大而无法用单台 OBServer 承载全部分区数据, Sharding = Partition/Adaptive 无法控制分区 Leader 分布而导致性能受限的问题。通过新增 SCOPE 属性控制分区 Leader 分布方式,原 SHARDING 属性继续用于控制分区聚集与均衡策略。低版本集群的表组升级至 V4.4.2 BP1 的 SCOPE 属性为 NULL。

    SHARDING SCOPE 组合策略说明 PARTITION CLUSTER 表组内分区数据按一级分区规则聚合成分区组,各分区组 Leader 按数据量和权重均匀地分布在集群的各 PRIMARY_ZONE 。(等价于旧版本 sharding=partition ) ADAPTIVE SERVER ADAPTIVE ADAPTIVE 相当于 SHARDING=ADAPTIVE,SCOPE=CLUSTER 策略 ADAPTIVE CLUSTER 表组内表仅能同时为一级分区表或二级分区表;一级分区按一级规则聚合,二级分区以每个一级分区为一个均衡组并按二级规则聚合。表组内各分区的 Leader 在集群各 PRIMARY_ZONE 均匀分布。(等价于旧版本 sharding=adaptive

    存储过程性能优化

    优化 PL/SQL 存储过程执行性能,包括循环场景(循环+静态 SQL、循环+cursor)性能优化、系统包 LLVM 编译产物拆分到系统租户、Exception 执行性能优化、MySQL 模式 LLVM CG 优化、带 Null 值匿名块参数化。

    双密码管理功能支持

    兼容 MySQL 8.0 双密码机制,解决企业级数据库运维中修改应用账号密码可能导致连接中断的问题,实现密码修改过程中的无缝过渡。

    执行器增强

    持续增强 SQL 执行器稳定性与性能,包括 NLJ 性能优化、单机串行执行下 TOP-N 返回的数据改进为稳定排序(支持同 Sort Key 的数据按排序前顺序返回)、MySQL 模式支持 WINDOW_FUNNEL 表达式、MySQL 模式支持 ALTER VIEW COMPILE

    SCHEMA HISTORY 回收优化

    新增 package、routine、ols、udt 对象回收,减少历史记录过多对 schema 刷新性能的影响;优化回收性能并将回收任务改为租户级调度管理。

    MySQL 只读 SELECT TIMEOUT

    MySQL 模式新增 MAX_EXECUTION_TIME 控制只读 SELECT 超时时间。

    OB_QUERY_TIMEOUT MAX_EXECUTION_TIME 控制整条查询超时时间,适用于 SELECT UPDATE INSERT DELETE (除 MAX_EXECUTION_TIME 控制类型外) 控制单条只读 SELECT SINGLE-STATEMENT QUERY 或 MULTI-STATEMENT 场景中的只读 SELECT STATEMENT > 0 且语句为只读 SELECT ,且该只读 SELECT 不在存储过程中,也不会触发会修改数据的操作(MULTI-STATEMENT QUERY 见下方说明)
  • 该变量生效条件为 MAX_EXECUTION_TIME > 0 (默认 0,单位毫秒),总体超时时间仍受 OB_QUERY_TIMEOUT 控制。
  • MULTI-STATEMENT 场景下,整个查询执行时间不超过 OB_QUERY_TIMEOUT ;只读 SELECT 同时受 MAX_EXECUTION_TIME OB_QUERY_TIMEOUT 约束;特殊情况是当一个 MULTI-STATEMENT 的查询中既包含只读 SELECT STATEMENT,又包含除只读 SELECT STATEMENT 外的 SELECT UPDATE INSERT DELETE 时,这个查询中的只读 SELECT STATEMENT 受到两个变量同时约束;其他 STATEMENT 仅受 OB_QUERY_TIMEOUT 约束。
  • SINGLE-STATEMENT 场景下,若 MAX_EXECUTION_TIME > 0 ,整条查询超时时间为 MAX_EXECUTION_TIME
  • 子查询 SELECT * FROM (SELECT * FROM T1); 按一个 STATEMENT 处理。
  • 外表性能优化

    包括 Parquet 格式 Page 级预取、外表 CSV 格式并行解析、Hive 表查询优化、ODPS(MaxCompute)大分区多机并行下载优化。

    向量搜索扩展 similarity 相关函数

    新增 similarity 功能,支持在 LIMIT 后通过 parameters (similarity=x) 指定相似度阈值并过滤低于阈值结果;提供 inner_product_similarity cosine_similarity l2_similarity 三种函数,返回值域为 [0,1] ,表示两个向量的相似度越接近于 1 越相似。具体请参见 相似度函数

    IVF 向量索引性能优化

    IVF / IVF_PQ 索引在构建、查询、DML、易用性四个维度升级。构建侧通过 Kmeans 并行化和 domain id merge 框架适配提升构建效率;查询侧引入迭代式过滤算法,按过滤率智能选择 pre/post filter;DML 侧通过缓存机制优化增量写入;易用性侧支持索引重建参数修改、构建进度监控、语句级 nprobes 参数动态配置。具体请参见 IVF 系列索引

    收集实时统计信息

    存储层收集实时统计信息,增强可观测性。

    小事务转储状态优化

    针对高频小事务场景优化事务状态回填机制,加速数据清理;避免长事务阻塞回收,即使存在未提交事务也可清理已完成事务数据,提升读写性能。

    其他性能优化

  • 优化涉及外键、trigger 等复杂条件 DML 语句性能。
  • OBKV 模式新增 CDC 不同步 TTL DELETE 日志能力,以降低 I/O 压力。
  • 产品行为变更

    集群级配置项 ob_storage_s3_url_encode_type 默认值修改 默认值修改为 compliantRfc3986Encoding (仅对 S3 SDK 生效)。 OBCDC 适配 IPv6 改造 OBCDC 支持 IPv6。 [G]V$OB_SQL_AUDIT 新增列/列语义变更 新增 COMMIT_TIME TX_TABLE_READ_CNT OUTROW_LOB_CNT OBJECT_STORAGE_READS PARENT_TRACE_ID 等列;其中 COMMIT_TIME 记录事务提交耗时。 ELAPSED_TIME 列语义变更为包含 COMMIT_TIME GV$SQL_AUDIT 新增 COMMIT_TIME bigint(20) ),表示 SQL 提交耗时(微秒)。 DBA_OB_USERS / CDB_OB_USERS 新增 old_password varchar(128) )和 old_password_start_time bigint(20) )列,用于双密码信息管理。 mysql.user 新增 user_attributes longtext )列,用于存储扩展属性(JSON 格式),双密码信息存储在 JSON 对象的 additional_password key 中。 DBA_PROFILES 新增 password_rollover_time ,用于控制密码轮转有效期(微秒),并新增 PASSWORD_ROLLOVER_TIME 资源项展示。 DBA_USERS / USER_USERS 列值逻辑变更 ACCOUNT_STATUS 新增状态 OPEN & IN ROLLOVER ,表示账户正常且处于密码轮转期,新旧密码均可使用。 ALL_OBJECTS / DBA_OBJECTS / USER_OBJECTS 新增 OBJECT_TYPE='JAVA CLASS' ,用于展示上传的 Java Class 对象。 DBA_OB_TENANTS 新增 PROTECTION_MODE PROTECTION_LEVEL ,用于展示主备库保护模式与保护级别。 CDB/DBA_OB_SYNC_STANDBY_DEST 系统/用户租户下查看各租户强同步下游信息。 CDB/DBA_OB_TABLEGROUPS 新增 SCOPE VARCHAR(20) )列,展示表组分布范围( SERVER / ZONE / CLUSTER )。当 SCOPE 为空时, SHARDING='NONE' 显示 SERVER SHARDING='PARTITION'/'ADAPTIVE' 显示 CLUSTER CDB/DBA_OB_TABLEGROUP_TABLES / CDB/DBA_OB_TABLE_LOCATIONS 新增 SCOPE 列,展示表所属表组分布范围属性。 SHOW TABLEGROUPS 新增 SCOPE 列,展示表组分布范围属性。 CDB/DBA_SCHEDULER_RUNNING_JOBS 展示租户下正在运行的 job,包含 20 个字段。 CDB_SCHEDULER_JOBS 展示所有租户下所有 job(运行中和未运行),补充 DBA_SCHEDULER_JOBS 对应 CDB 视图。 DBA_OB_ROOTSERVICE_EVENT_HISTORY 新增 OLD_VALUE (通过 NAME4/VALUE4 展示),记录配置项修改前旧值。 EVENT='admin_set_config' 时, NAME4='old_value' GV$SESSION_LONGOPS IVF 聚类构建阶段新增进度信息,格式为 VEC_TASK:{TRI_CNT, CUR_ITER, END_DIFF, DIFF, IMPALANCE, SUCC_TABLET} GV$OB_LOG_STAT 新增 SYNC_MODE VARCHAR(128) ),展示日志流同步模式: ASYNC SYNC PRE_ASYNC DBA_JAVA_POLICY / USER_JAVA_POLICY 新增 Java Policy 管理相关视图。 DBA_TAB_PRIVS / USER_TAB_PRIVS / ALL_TAB_PRIVS 新增 RESTRICTED SESSION 权限。

    语法与函数变更

    语法/函数 ALTER USER 'user'@'host' IDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD MySQL 双密码支持,修改密码时保留旧密码作为次密码,新旧密码同时有效。 ALTER USER 'user'@'host' DISCARD OLD PASSWORD MySQL 双密码支持,丢弃旧密码,仅保留当前主密码。 MAX_EXECUTION_TIME(N) hint MySQL SQL hint 语法, N 为毫秒,用于设置单条 SELECT 超时时间。 SET SESSION max_execution_time = N MySQL 会话级系统变量设置。 SET GLOBAL max_execution_time = N MySQL 全局级系统变量设置。 ALTER SYSTEM SET SYNC_STANDBY_DEST = "SERVICE=host NET_TIMEOUT=20 HEALTH_CHECK_TIME=40s USER=user_name@tenant_name PASSWORD=password" [tenant = "tenant1"] MySQL 设置强同步备库目的端。 host 为备库 IP 列表(分号分隔), NET_TIMEOUT 默认 30s, HEALTH_CHECK_TIME 默认 60s, USER/PASSWORD 为复制专用用户凭据。 ALTER VIEW [database.]view_name COMPILE MySQL MySQL 模式支持带 database 限定的语法。 CREATE TABLEGROUP tablegroup_name [SHARDING = 'NONE'] [SCOPE = 'CLUSTER'] MySQL 创建表组时支持指定 SCOPE=CLUSTER ,实现全集群打散(需租户所在集群版本 >= V4.4.2 BP1)。 ALTER TABLEGROUP tablegroup_name SCOPE = 'CLUSTER' MySQL 支持修改表组 SCOPE 属性(需租户所在集群版本 >= V4.4.2 BP1)。 window_funnel(window, mode, timestamp, cond1, cond2, ..., condN) MySQL 漏斗分析聚合函数,返回值范围 [0, N] ,支持 default strict_deduplication 两种模式。 cosine_similarity(vector_1, vector_2) MySQL 计算余弦相似度,值域 [0,1] l2_similarity(vector_1, vector_2) MySQL 计算 L2 相似度,值域 [0,1] inner_product_similarity(vector_1, vector_2) MySQL 计算内积相似度,值域 [0,1] SELECT ... ORDER BY distance_expr APPROX LIMIT k PARAMETERS (similarity=x) MySQL 向量查询支持按相似度阈值过滤( x 取值 [0,1] )。 CALL DBMS_VECTOR.REBUILD_INDEX(index_name, table_name, column_name, trigger_percent, extra_args1, extra_args2, build_param) MySQL 支持通过存储过程重建向量索引并修改索引类型和参数。 SELECT ... ORDER BY distance_function(column, vector) APPROXIMATE LIMIT n PARAMETERS(IVF_NPROBES=value) MySQL 支持语句级指定 IVF_NPROBES 查询参数。 CALL dbms_vector.rebuild_index(index_name, table_name, column_name, delta_rate_threshold, index_organization, distance_metrics, index_parameters) MySQL 支持修改 IVF 索引参数重建,覆盖 IVF_FLAT IVF_PQ 主要参数。

    配置项变更

  • 优化全文索引构建,解决超大文本 ik 分词导致的内存膨胀问题。
  • 修复复制表中含向量索引时,升级阶段执行 upgrade_health_checker 脚本失败的问题。
  • 优化向量 follow 同步机制,修复切主后可能触发的大量补数据问题。
  • 优化 JSON_OVERLAPS 表达式与向量过滤器组合场景下,非主键大账号耗时长的问题。
  • 修复 HNSW_BQ 配合 BETWEEN 查询时,SQL 查询结果与暴力搜索结果不一致的问题。
  • 优化部分场景下向量查询的执行计划,解决优化器误判导致未走索引、性能下降的问题。
  • 修复前缀索引与语义索引共存时,前过滤器 pre_filter 查询遗漏数据的问题。
  • 优化全表读取 LOB 数据和行外存储(Outrow)数据量大时的内存管理,防止内存膨胀。
  • 修复指定 Hint 多值索引查询报错 1235 不支持的问题。
  • 修复了重建向量索引(rebuild)时可能发生的 coredump 问题。
  • 修复了 HNSW 索引在 LATENCY_FIRST 模式下查询报 -7605 错误及 IVF 索引内存爆的问题。
  • 修复了向量索引 adapter 双重释放(double free)导致异常的问题。
  • 修复了 IVF 缓存管理器内存泄漏的问题。
  • 修复了 HNSW 索引并行补全数据时数据丢失的问题。
  • 修复了删除向量索引在离线 DDL 失败后挂起(hung)的问题。
  • 修复了向量索引 DDL 与后台任务缺少互斥逻辑导致 DDL 挂起的问题。
  • 修复了带生成列的向量索引扫描返回空结果的问题。
  • 修复了向量索引内存数据同步(memdata sync)异常的问题。
  • 修复了 Hash Join 在 nestloop 模式下能发生的 coredump 问题。
  • 修复了锁等待管理器(lock wait mgr)漏唤醒导致事务挂起的问题。
  • 修复 OBKV 在 batch insertOrUpdate 场景下,偶现的 4012 超时问题。
  • 修复向量后台异步任务的 destroy 函数缺少对改部分内存的析构,导致 VecIdxTaskCtx 模块内存泄漏的问题。
  • 修复部分场景下, __all_virtual_vector_index_info 表中向量内存统计整形溢出的问题。
  • 修复部分向量查询场景下,skyline 裁剪被禁掉了,没有裁剪掉不优的索引,导致生成的计划不优的问题。
  • 修复老版本向量索引升级到 HotFix 版本, DBMS_VECTOR.SET_ATTRIBUTE 设置并行度不正确的问题。
  • 修复大数据量,大分区数场景下向量索引升级时可能出现的查询卡住的问题。
  • 修复部分全文和向量场景下,查询报错 4377 的问题。
  • 修复堆表 HNSW 索引执行 INSERT ON DUPLICATE KEY UPDATE 报错 1062 的问题。
  • 修复向量索引全量重建、重启或者升级时快照没有加载,同时存在增量索引,存在误判,导致异步任务冗余触发的问题。
  • 修复部分场景下向量索引增量重建影响查询 RT 的问题。
  • 优化向量随表建索引场景下的写入性能。
  • OceanBase V4.4.2 是面向混合负载的 TP/AP 大融合 LTS 版本,深度集成 4.2.5 LTS 的事务处理能力与 4.3.5 LTS 的分析处理能力,在数据管理、兼容性、系统安全和运维诊断等多维度系统性增强内核能力,为关键交易负载与复杂分析负载提供更强大、更稳定的技术支撑。

    TP 场景 下,新版本支持二级分区表的一级分区与普通一级分区表进行交换,极大简化大规模数据分区管理和数据重组;新增 Session 级私有临时表,完善临时表体系。OBCDC 支持表级恢复后的增量数据同步,并支持同步 virtual 生成列,更好地满足下游系统对表级增量数据和生成列的消费需求。

    KV 场景 下,持续完善 OBKV 能力,新增弱读、TTL 支持索引扫描、热 Key 查询优化等特性,并完成对 OBKV‑HBase 监控项的治理,在高并发 KV 与时序场景下提供更低时延与更强可观测性。

    性能 方面,V4.4.2 面向细分场景进行了专项优化:串行建表性能在同等场景下提升约 60%。针对国产化大规格 CPU 环境,PDML 性能提升约 25%,复制表 Follower 查询性能提升约 14 倍,逼近 Leader 查询能力,显著增强系统横向扩展能力。同时,引入 PX 自适应任务切分机制,自动识别并切分长尾任务,实现并行查询负载重均衡,加速查询完成。

    安全与运维诊断 方面,优化死锁检测机制,增强 Active Session History (ASH) 数据完整性,并重构 SQLSTAT 统计信息,为数据库管理员定位性能瓶颈和异常 SQL 提供更精细、更可靠的诊断工具。

    V4.4.2 作为 LTS 版本,推荐 TP、AP 和 HTAP 业务使用

    关键特性说明

    分区交换支持一级与二级分区表交换

    分区交换功能新增支持二级分区表的一级分区与一级分区表进行交换。具体请参见 分区交换

    OBCDC 支持表级恢复后增量数据同步

    OBCDC 支持黑白名单功能,在进行数据同步时,只同步在白名单并且不在黑名单中的表,因为表级恢复流程是 offline ddl 流程,对恢复出来的表,OBCDC 获取不到 table_name,无法支持表级恢复后的表的增量数据同步。新版本在 OBServer 表级恢复流程的最后,在 __all_ddl_operation 表中新增字段记录恢复后的表名,这样 OBCDC 就可以识别这个恢复后的表,并根据表名做黑白名单匹配,进而支持增量数据同步。

    物化视图功能增强

    V4.4.2 版本继续完善物化视图能力,包括:

  • DDL 能力增强,支持 RENAME 、物化视图日志支持加列。
  • 增量刷新功能增强,新增支持外连接、 UNION ALL 、单表非聚合模式、带 LEFT JOIN 的聚合物化视图等类型,支持重复的 SELECT ITEM GROUP BY 列, MIN / MAX 聚合物化视图增量刷新功能增强。
  • 嵌套物化视图能力增强,支持级联刷新。
  • 物化视图刷新时维度表不刷新,在创建物化视图时,通过新增的 AS OF PROCTIME() 语法指定不需要刷新的表,在执行物化视图增量刷新时,不刷新该表的增量数据。
  • 单表聚合的增量刷新物化视图支持 MIN() / MAX() 聚合函数。
  • MLOG 自动化管理,在创建增量刷新物化视图时,自动为基表创建/替换所需要的 MLOG 表,并在后台定期清理冗余的 MLOG 表。
  • md5_concat_ws 函数支持。
  • 物化视图的视图内容和创建物化视图的报错信息优化。
  • 支持基于无主键的增量物化视图。
  • 支持引用声明为 AS OF PROCTIME() 的视图。
  • 物化视图支持 UDT 和 UDF,支持 minimal 模式。
  • SQL 能力增强

    V4.4.2 版本,对多项 SQL 能力进行了增强,支持视图过滤条件包含子查询时指定 WITH CHECK OPTION

    支持 Session 级别私有临时表

    V4.1.0 BP4 版本起禁用了临时表功能,V4.4.2 版本放开临时表功能,支持创建临时表、修改临时表、删除临时表以及基于临时表创建索引等功能。

    新增 CAST AS INTEGER CAST AS ARRAY SPLIT CONTAINS NEXTVAL(SEQ) / CURRVAL(SEQ) ;支持 ARRAY<> 格式数组定义;支持 JSON 类型列转换为 TEXT / MEDIUMTEXT / LONGTEXT INSERT OVERWRITE 支持 INTO 关键字;SQL 后只加 -- 符号,修改为执行不报错; RANGE MAXVALUE 保留关键字更改为非保留。具体请参见 CAST

    备库读功能优化与稳定性增强

    V4.4.2 版本,对备库读功能进行了优化,通过优化事务状态推断机制,将原本需要每个副本独立收集参与者状态的方式,改为由协调者 Leader 统一收集和缓存,显著减少消息交互次数。同时引入重试机制,在副本落后时自动转发请求至其他副本处理,以避免阻塞或对事务状态进行错误推断,提升备库读场景的稳定性。

    支持异构 zone

    OceanBase 4.0 设计了同构 zone 的架构,虽然简化了集群部署架构,但是丢失了部分 OceanBase3.x 支持的功能,比较常见的问题是,在单个节点宕机场景下,需要缩容时,需要同时对所有 zone 进行缩容,导致资源浪费。为了解决上述问题,增强 OceanBase 的扩缩容能力,新版本支持了异构 zone 部署架构。

    在异构 zone 部署架构下,租户允许配置两种不同的 UNIT NUM,当出现单个节点故障时,可以直接删除故障节点,不需要调整其他 zone,降低了运维成本。同时单个节点宕机,不会影响其他 zone 的负责均衡,降低了对业务流量的影响,实现更平滑的扩缩容。使用手册参考 平滑扩缩容应用案例

    OBCDC 支持同步 virtual 生成列

    OceanBase 4.0 版本开始,虚拟生成列不再记录在 CLOG 中,因此 OBCDC 无法从 CLOG 中同步虚拟生成列,这对依赖虚拟生成列的下游系统而言,无法获取虚拟生成列的值也就意味着数据的丢失,是不可接受的。新版本 OBCDC 支持了同步 virtual 生成列,满足下游系统对虚拟列数据的消费需求。

    SQL 兼容

    Union Distinct RCTE

    CTE 支持 Recursive Union All 及 Recursive Union Distinct。新版本扩展支持 Recursive Union Distinct,保证输出数据的唯一性;同时加强 Recursive Union All,支持内存不足时数据落盘。具体请参见 通用表表达式

    OBKV/多模 增强

    V4.4.2 版本对 OBKV/多模场景能力做了多项增强,主要包括以下几个方面:

    OBKV 支持弱读和就近机房读

  • 弱读,允许业务从非主副本(Follower)读取数据,由于这些副本可能不是最新的,因此读到的数据可能是略旧于主副本的版本。
  • 就近机房读,客户端根据当前地理位置或网络拓扑,优先从离自己最近的机房读取数据,以减少网络延迟,提高响应速度。
  • 详情请参见 OBKV-Table 弱读和就近机房读 OBKV-HBase 弱读和就近机房读

    TTL(Time To Live)支持索引扫描功能

    允许用户通过指定索引来加速 TTL 数据清理过程。默认的主键扫描场景下,TTL 任务需要进行全表的扫描并且读取完整的行来判断是否过期,通过对过期列建立本地索引可以降低全表扫描完整行带来的 IO 开销,加速扫描的速度。使用说明参考 OBKV-Table TTL OBKV-HBase TTL

    OBKV-HBase 监控增强

    OBKV-HBase 监控能力增强,主要包括:
    * 区分 HBase get 和 scan 在 QPS、RT 和 P99 监控中的统计,分别使用独立的监控项进行跟踪。
    * 在 batch 场景下支持区分单 put 和单 delete 操作,提供更细粒度的监控统计。
    * 在未开分布式的情况下,HBase batch get 操作已支持使用 audit 跟踪。
    * 在 OBKV-HBase 客户端新增返回相应操作的 OPS、RT 和 P99 数据。
    新增监控项说明请参见 OBKV-HBase 监控指标

    时序模型支持 put 操作

    由于时序模型的 V 列是 json 类型,受限于 lob 无法支持 put 操作,时序 put 操作是基于 insert 接口实现。insert 接口在执行时会进行主键冲突检查,在压测中发现主键冲突检查占用大量的读带宽,冲突检查需要对 sstable 发起 get 操作,此时读延迟会很高,同时在随机写入场景下(大部分用户场景),转储合并占用的 IO 带宽也会很大,两者叠加会让云盘带宽很快达到上限瓶颈,从而触发写入限速。因此,在 V4.4.2 版本支持 put 操作,解决上述问题。

    OBKV-HBase 查询优化

    OBKV-HBase 的查询采用全范围扫描策略, 先扫描所有 qualifiers 的数据再进行过滤。这种方式在服务端会产生大量冗余扫描和处理开销, 特别是当对一个宽行或者多版本的行查询只涉及少量 qualifiers 时, 延迟问题尤为明显。 在 V4.4.2 新增一个配置项 HBASE_HTABLE_HOTKEY_GET_OPTIMIZE_ENABLE 用于指定快速跳过宽行或多版本的行来降低查询时延。功能详细说明请参见 OBKV-HBase 查询优化

    串行建表性能优化

    为了提升 DDL 的性能,在 4.2.x 版本支持了 CREATE/DROP 等 DDL 的并行执行能力,但是当存在未支持并行的 DDL 时,无法利用并行 DDL 能力,因此需要优化串行 DDL 的性能。本特性以串行建表为目标场景,对 schema 的生成、写入与刷新等环节进行了优化,能够明显提升串行建表的速度,也能够小幅提升其他类型 DDL 的运行速度。经测试,创建 1000 张 sysbench 简单表,V4.4.2 相比 V4.3.5,性能提升 60%。

    库函数申请内测性能优化

    基于 mimalloc 内存分配器思想设计的库函数的内存分配优化,主要用于提升 OceanBase 中库函数在高频小对象场景下的内存分配效率。通过引入分片式内存块组织、延迟空闲回收及无锁竞争机制,显著优化库函数分配内存的性能,有效降低分配延迟与资源争用,为大规模高并发业务提供高效、稳定的内存管理支撑。

    国产化大规格机器场景下的性能优化

    主要对国产化 CPU 环境下典型场景的的 CPU 热点进行优化, 包括优化 PDML 和 复制表查询的性能。在大规格 256c 环境中高并发 PDML 性能将提升25%,并减少了非 PDML 场景的内存;业务连 Follower 查询复制表的性能提升 14 倍,从 2w QPS 增长到 27w+,与直接连 Leader 查询的 30w QPS 之间差距不到 10%。在 32c 的小规格环境上述优化对性能同样存在提升。

    PX 自适应任务切分

    针对PX扫描中出现长尾任务现象,自适应的对长尾任务再次划分,实现负载重均衡能力,加快查询速度。具体请参见 分布式执行和并行查询

    易用性提升

    死锁检测诊断优化

    为了提升死锁检测的易用性,新版本新增多项诊断优化,死锁检测发现死锁后汇报内部表时,携带更加丰富的信息,完善锁到事务的映射逻辑,同时增加了对切主场景的死锁检测能力,同时,修复了转储场景中,诊断信息维护不准确的问题,提升诊断稳定性。

    实时统计信息收集

    GV$OB_SQL_AUDIT 和 GV$SQL_PLAN_MONITOR 是常用的 SQL 监控视图,记录了每一次 SQL 请求的来源、执行状态、资源消耗及等待时间、 SQL 文本、执行计划、算子消耗的时间、吐行等关键信息。但在逆序扫描等涉及存储层信息收集的场景下,仍然存在信息不足的问题。为了进一步提升 SQL 诊断的易用性,在 4.4.2版,存储层新增实时统计信息并记录在监控视图中,包括查询访问的微块数和行数、下压的微块数和行数、走下压路径的耗时、不走下压路径的耗时、skip index跳过的微块数和行数等主要信息,并增加filter过滤的行数、filter过滤的耗时、读到的未提交行数量等信息,同时优化了 SQL Audit等监控视图中统计信息收集到数据不完整和不准确的问题。

    ASH 数据完整性增强

    V4.2.5 对 ASH 进行了重构,ASH 可以跟踪租户队列请求的状态,每一个请求每一秒都会向 ASH buffer 写入一条记录,目前 ASH buffer 是 30M,大概能存五万条数据,每两分钟检测一次是否需要将内存中的数据落盘,但在队列大量积压场景下,ASH buffer 来不及落盘数据就已经被覆盖了,会丢失问题事件的重要诊断数据。V4.4.2 申请 __all_virtual_ash 表增加权重列 weight,默认为1,当 ASH buffer 可能被快速写爆时(一般是由于队列积压),不会对每一个队列积压等待事件写一条 ASH 记录,而是通过 weight 标志一条记录权重,从而增强诊断数据的完整性。

    SQLSTAT 重构

    Sqlstat 记录了 sql id+plan hash 维度的统计信息,根据这些信息,可以较为直接地判断出这个 SQL 是否存在问题,协助找到 RT 异常的 sql 。但是目前版本,sqlstat 存在一些已知问题:

  • plan cache 共用 lib cache,sqlstat 占用过多 lib cache 导致计划无法加入 plan cache。
  • 在更新 sqlstat 快照值时只更新了 leader 节点的,而没有更新 follower 节点的数据快照,导致 follower 节点数据错误。
  • sqlstat 落盘时间为 1 小时一次,无法及时反应 SQL 执行情况。
    为了解决上述问题,在 V4.4.2 版本对 sqlstat 进行了重构,主要涉及内容:
  • 将 sqlstat 从 library cache 移除,维护一个租户 hashmap,定时执行快照和淘汰。
  • 每次 SQL 执行完成之后,先累加到 physical plan 上,达到累计次数后再累加到租户 hashmap 上。
  • 查询虚拟表时先将 physical plan 上的数据累加到租户 hashmap 上,然后再输出数据。
  • 兼容性变更

    新增如下变更:

    DBA_OB_LOB_CHECK_TASKS 记录 LOB 一致性校验和恢复的任务扫描的进度,可通过该视图查询租户级任务与 LS(Logical Shard)级任务,查询租户级任务时 CDB_OB_LOB_CHECK_TASKS 记录 LOB 一致性校验和恢复的任务扫描的进度 DBA_OB_LOB_CHECK_EXCEPTION_RESULT 展示 LOB 一致性校验的异常 table 和 tablet 以及异常类型 CDB_OB_LOB_CHECK_EXCEPTION_RESULT 展示 LOB 一致性校验的异常 table 和 tablet 以及异常类型 GV$ACTIVE_SESSION_HISTORY / V$ACTIVE_SESSION_HISTORY / GV$OB_ACTIVE_SESSION_HISTORY / V$OB_ACTIVE_SESSION_HISTORY
    • 增加 WEIGHT 列和 IS_WR_WEIGHT_SAMPLE 列
    • WEIGHT 表示 workload_repository 中一条 ASH 记录的权重,默认为 1
    • IS_WR_WEIGHT_SAMPLE 表示是否为队列积压等待事件压缩列
    DBA_WR_SQLSTAT/CDB_WR_SQLSTAT SAMPLE_TIME 列,表示 sqlstat 快照落盘的时间,在一次 WR 快照间隔内,sqlstat 可能落盘多次 GV$OB_SQLSTAT 新增 latest_active_time,表示这个 sqlstat 最后一次活跃的时间 DBA_OB_KV_TTL_TASKS 新增 scan_index,记录 TTL 任务扫描的索引 DBA_OB_KV_TTL_TASK_HISTORY 新增 scan_index,记录 TTL 任务扫描的索引 CDB_OB_KV_TTL_TASKS 新增 scan_index,记录 TTL 任务扫描的索引 CDB_OB_KV_TTL_TASK_HISTORY 新增 scan_index,记录 TTL 任务扫描的索引
  • 修复向量索引 rebuild 失败,未删除 lob meta 的问题。
  • 修复大数据量分区表场景下,可能出现的创建向量索引报错 invalid timestamp 的问题。
  • 支持通过 dbms_vector.set_attribute 的方式,设置向量索引自动 rebuild 并行度和执行周期。
  • 修复 CDC 处理 LOB 存储数据时可能卡住的问题。
  • 修复当表包含 NOORDER 自增列,且租户节点没有刷过 Leader Location, DROP TABLE 会报错 4038 的问题。
  • 修复 obkv 场景下,OBKV-HBase 对同一个 Key Qualify 进行频繁更新时,可能导致 RT 升高的问题。
  • 修复向量化 2.0 month_name 表达式优化引入的,计算到的月份大于 12 时访问越界导致 core 的问题。
  • 修复 SQL 执行消耗了较大的内存且途中触发了 Inner sql 切换租户时,可能出现的查询报错内存不足的问题。
  • 修复部分场景下查询物化视图,且不包含任何基表。使用较小 LIMIT 查询慢的问题。
  • 修复部分场景下,Buffer 表导致的执行计划异常跳变的问题。
  • 修复计划中包含两个连续求值为 true 的约束时,在特定约束条件下可能命中 plan cache 中的错误计划,导致查询结果错误的问题。
  • 修复在开启 _enable_enhanced_cursor_validation 参数后,如果在 cursor open 前事务已打开 8 张及以上表,并且 cursor 访问的是第 8 张及之后的表,会出现无法读取当前事务对此表的修改内容的问题。
  • 修复建表语句中 TTL = ( create_time + INTERVAL 30 DAY) 且 create_time 带反引号时,可能导致错误清理未到期数据的问题。
  • 修复当 I/O 带宽超过 1.5GB 时,I/O 校准结果可能偏小,影响 I/O 隔离效果的问题。
  • 修复多层 PL 执行的特定场景下,解析过程中因 PL 文本过长触发 4019 栈溢出,导致异常打印信息过长,最终可能引发 core dump 的问题。
  • 修复特定场景下,非精确匹配的 like 表达式在 query range 抽取时不准确,导致查询结果错误的问题。
  • 修复 ARM 环境下使用字典编码时,在特定场景下 filter 下压到基线微块后,NULL 值可能未被正确过滤的问题。
  • 修复 UNION ALL 查询常量总数超过 128 并且大 IN 语句中常量数量超过 1000 时,可能触发 core dump 的问题。
  • 修复并发执行 prepare stmt 且同时触发 kv cache wash 的低概率情况下,可能导致 core dump 的问题。
  • 修复在 multi-stmt 查询报错后,再使用单条 stmt 重试也报错时,连接被意外断开的情况。
  • 修复网络环境差时,更新数据信息过程瓶颈导致 1 秒内无法完成读写切流,最终迁移任务无法完成。在读写切流期间会禁止写入,影响业务写入延迟的问题。
  • 修复 GV$SYSSTAT 视图中“事务锁等待次数”“事务锁平均等待时间”两个监控指标始终为 0 的问题。
  • 修复特定场景(如递增纯写入)下,minor 合并后宏块无法复用,导致 I/O 增多和 CPU 占用飙高的问题。
  • 修复在租户 CPU 规格较大、系统负载高或网络 I/O 瓶颈时,SQL 执行远程操作或远程 LOB 列查询等大并发流式 RPC 请求时,可能报 4067 错误的问题。
  • 修复当 __all_table_history 表记录数量较多时, TRUNCATE 分区操作变慢的问题。
  • 修复大 IN 场景下,若 IN 条件探测的列类型为 text urowid IN 列表元素超过 6.6 万,可能导致栈溢出引发 core dump 的问题。
  • 修复主备切换过程中,某些情况下日志归档内部表异常导致日志归档阻塞的问题。
  • 修复特定场景下嵌套子查询提升重写不当,造成结果正确性问题。
  • 修复迁移等操作导致单机出现多个日志流,从而写线程 I/O 饱和的问题。
  • 修复 ObObj 比较函数不支持 outrow LOB 的问题。当 PL 自定义函数入参为 LOB 类型,且在函数内部以此作为 SQL 过滤条件时,调用 obj 比较函数会触发 bug,导致连接卡住的问题。
  • 修复 PS 协议执行带 RETURNING 子句语句的特定场景可能出现内存泄漏问题。
  • 修复补偿日志功能开启时,自动清理未能正确删除补偿日志的问题。
  • 修复频繁、大批量修改配置项引发死锁,导致大量线程卡等待锁和队列堆积,inner SQL 执行耗时增加,大量线程挂起风险增加的问题。
  • 修复 PL 代码中 IF 语句过多时可能导致栈溢出 core dump 的问题。
  • 修复将 SQL 计划加入 plan cache 时,若 SQL 不可参数化参数为 Lob 类型,可能导致 core dump 的问题。
  • 修复导入的 PL 存在乱码时,执行 SHOW CREATE 可能触发 core dump 的问题。
  • 修复向量 follower 节点上 ModulePageAlloc 模块内存占用高的问题。
  • 修复租户级别锁导致向量查询 RT 尖刺问题。
  • 修复后建多值索引数组大小超过 32 个元素可能导致 core 的问题。
  • 修复内存分配失败,导致补数据流程异常时,向量查询可能触发的 core 问题。
  • 修复堆表分区表场景下,混搜在 JOIN GROUP BY 场景下的查询准确性问题。
  • 修改支持设置 ef_search 上限为 topK * 10。
  • 修复混搜接口转换 SQL 时,不支持特殊字符的问题。
  • 修复 OBKV 行锁冲突场景下,重试方案可能存在的正确性问题。
  • 修复外表文件过多导致报错的问题。
  • 修复在 DROP REBUILD 向量索引场景下,向量索引磁盘占用空间异常膨胀的问题。
  • 禁用 rowkey TTL 功能,避免全表扫描提升查询性能。
  • 修复与转移相关的宏缓存垃圾回收问题。
  • 修复 atomic file 在垃圾回收阶段存在的内存泄漏问题(单个 tablet 泄漏约 200 字节)。
  • 修复切主过程中 RootService 无法正常卸任的问题。
  • 修复聚合子查询上拉过程中未能移除 remove_const 表达式的问题。
  • 修复 connect_by join 操作忽略了常规嵌套循环路径的问题。
  • 禁用复杂重扫路径裁剪。
  • 修复正则表达式执行报错 U_REGEX_TIME_OUT 的问题。
  • 在默认列存扫描器中增加分组聚合下推的防御代码。
  • 修复未切换内存上下文情况下游标填充结果错误的问题。
  • 优化 SQL 层内存限制。
  • 修复分区 topn 排序返回 -4013 错误的问题。
  • 修复生成列无法匹配索引的问题。
  • 修复 exchange partition 时表统计信息更新时间顺序不正确的问题。
  • 修复 dbms_xplan 的 bug。
  •