OceanBase 441 社区版于 10 月 24 日正式发布,@兹拉坦 第一时间替大家测试了混合检索功能,新增的这个系统包 DBMS_HYBRID_SEARCH,易用性和性能都很好,欢迎大家来尝试~
福利活动: 《AI 时代的数据库进化论 —— 从向量到混合检索》,欢迎大家在这篇公众号文章下,通过留言,参与抽奖~
相关文档:《向量索引混合检索》
下载体验地址:OceanBase 软件下载中心
V4.4.1_CE
版本信息
- 发布时间:2025 年 10 月 24 日
- 版本号:V4.4.1_CE
- RPM 版本号:oceanbase-ce-4.4.1.0-100000032025101610
版本概览
OceanBase V4.4.1 作为开源的第一个 V4.4.x 版本,在多个维度实现了显著提升。
V4.4.1 版本拓展了 AP 能力,支持了全文短语精确匹配、扩展了 JAVA UDF 功能、打通数据归档 HDFS 的路径 ,并优化了外表查询、UDF 执行、PS Cursor Fetch 数据的性能 ,增强了 CSV 导入诊断能力、支持 RPC IO 线程配置项动态生效等,提升系统易用性。
V4.4.1 版本对向量检索能力进行了升级,支持 Hybrid Search 混合检索,提升召回效果。新增 AI function 能力,支持 SQL 访问大模型。此外通过适配 ARM 架构、无主键表优化、IVF 索引优化等手段进一步提高向量检索的性能。新增视图展示向量索引内存占用和异步任务状态,提升易用性。
V4.4.1 版本全面优化外表查询、旁路导入、存储层读写、PL 硬解析、UDF 执行、SQL 硬解析、Batch DML 及 DDL 性能。PL 硬解析耗时降低 14%,UDF 性能提升 15%-26%,旁路导入排序算法升级显著提升导入效率。
在兼容性方面,V4.4.1 版本在 MySQL 租户模式新增 Python UDF。
V4.4.1 版本支持手动备份数据清理、设置执行备份任务的节点范围、消费归档日志适配强关归档场景。此外支持了 HMS Catalog、OBCDC 支持同步备租户、LOB 大对象的前镜像输出、外表支持 JDBC 插件、备库支持 flashback 接入新主库、SQL 关键字限流、Database 内用户表聚合等关键能力。
关键特性说明
内核增强
- locality 变更支持 2F 到 1FOceanBase 4.x 作为单机分布式一体化数据库,能够支持单机部署扩展成分布式部署,但是低版本未支持分布式部署变更为单机部署。V4.4.1 放开限制, 允许通过 ALTER TENANT 语句将 locality 从 2F 缩减到 1F,从而支持租户的单副本模式。
- PS 参数化控制开关OceanBase 会对 prepare 文本中常量进行参数化,对于不同常量,可以命中相同的计划。但是在业务使用过程中,对于大小账户场景,可能会有意识的将与大小账号有关的参数,在 prepare 文本中,直接使用常量,不使用 question mark 通配符参数化这些参数;与大小账号无关的参数会使用通配符然后绑定变量。预期这样对于不同大小账号的参数,可以使用不同的执行计划,避免共用一个计划导致的计划不优问题。因此,V4.4.1 增加 ps 参数化租户级开关 enable_ps_parameterize,对于不使用 question mark 通配符的场景,用户可以选择性关闭 ps 参数化。
- 支持 ODPS Storage API基于 Tunnel API 的 ODPS 外表,执行阶段对每个分区的扫描,都需要开启独立的 session 来处理,而打开 session 需要秒级延迟,这导致一些本身耗时非常小的查询,会花费时间在 session 准备阶段。除 Tunnel API 外,ODPS 还提供了一种开放的 Storage API,支持直接访问 ODPS 的底层存储,提供了更多的优化策略和更好的读取性能,因此 OceanBase V4.4.1 适配支持了 ODPS Storage API,进一步提升外表访问性能。
- 临时文件优化数据库通常会使用临时文件来存储运行过程中生成的临时数据,以减少这些中间数据对内存的占用。在之前的版本中,临时文件模块内存不足触发刷盘的粒度为 file 级,并制定了相应的落盘策略。file 接口和内部字段会因为对刷盘的支持而相对复杂,后续扩展的维护难度较高。V4.4.1 版本,调整临时文件的刷盘粒度为 block,以降低 file 层对临时文件模块内的其他模块的耦合度。
- SELECT INTO OUTFILE 支持 HDFS 路径V4.4.1 版本持续完善外表能力,支持通过外表直接查询或导入 HDFS 路径文件。新版本进一步融合 HDFS 能力,支持将数据直接导出至 HDFS,且支持带 kerberos 认证的 HDFS 访问。
- 全文检索支持短语匹配全文检索目前已经支持 NATURAL LANGUAGE MODE、BOOLEAN MODE 两种查询模式,分别用于模糊匹配、不分词复杂逻辑匹配的场景。V4.4.1 版本,针对需要进行短语精确匹配场景,新增 MATCH PHRASE MODE 查询模式,可使用 MATCH (’ ') AGAINST (‘some words’ IN MATCH PHRASE MODE) 语法精确查询包含 “some words” 短语的文档信息。
- MySQL 模式 JAVA UDF为了进一步提升 PL 的灵活性和可扩展性,更好地支撑业务需求,V4.4.1 版本在 MySQL 模式下新增 JAVA UDF 功能。创建 JAVA UDF 时,支持指定 jar 包的 URL 路径,执行时动态加载;也支持通过 DBMS_JAVA.LOADJAVA 先上传 jar 包到数据库内,UDF 执行时直接引用。目前支持 ODPS 风格,仅需少量改动即可复用已有的 ODPS JAVA UDF jar 包。
-
备份恢复增强V4.4.1 版本对物理备份恢复功能做进一步的增强:备份清理引入了灵活的手动清理能力,支持用户按需删除指定备份集或归档片段,同时保留了自动清理机制。详情请参见手动触发备份的过期清理和手动清理指定的备份或归档数据。这种双轨并行的设计大幅提升了备份管理的灵活性和精细度。针对强关归档场景,对消费归档日志做了适配处理,支持区分
force stop round,进而能够让物理恢复/备库/CDC 等模块在消费归档日志时可以正确定位归档轮次和消费日志。此外,新版本支持用户设置用于执行备份任务的节点范围,同时限制备份及归档模块可访问备份/归档介质的节点范围,避免备份带来的流量占用相对珍贵的跨地域网络带宽,降低备份对业务正常运行带来的影响。详情请参见备份路径和归档路径源端配置案例。 -
OBCDC 同步备租户备库是 OceanBase 高可用体系中的重要组成,OceanBase 从 V4.1.0 版本开始支持备租户,作为生产租户(主租户)的备份,在主租户发生故障无法提供服务时,可以将备租户切换为主租户对外提供服务,减小数据库不可用时间,提供容错能力。OBCDC 以事务为单位,将 OceanBase 内增量事务数据格式化输出给下游组件消费。通过支持从备租户同步数据,解决如下场景的需求:
- 消费本地数据库数据的需求:消费 OBCDC 数据的应用和数据库主租户异地,业务优先考虑从本地的备租户中消费增量事务数据。
- 主备租户切换后消费备租户数据。在主备租户切换后,OBCDC 可以切换为消费备租户链路,避免数据链路中断。
- 通过消费备租户减小对主租户可能产生的影响,保障主租户的业务稳定性。
-
OBCDC 支持行外 LOB 前镜像输出V4.4.1 完善了行外 LOB 数据的前镜像输出,解决了
delete语句、update主键语句、update lob列行外存储转为行内存储、update非 LOB 列时被更新行中 LOB 列前镜像不完善的问题。 -
执行引擎增强V4.4.1 版本增强了 SQL 引擎技术,包括
Grouping Sets/Cube计划优化、NestedLoopJoin性能优化、WM_CONCAT适配向量化执行引擎 2.0。此外支持了arg_min/arg_max聚合函数,新增控制将执行的物理算子会退到向量化 1.0 的disable_op_rich_formatHINT 语法。在优化器层面 ,实现了stored生成列自动替换、多列大in条件单列条件抽取、预聚合算子下推、query range nlj快速路径增强、exists子查询添加partial limit和下推、适配index merge and等功能。 - 支持 HMS Catalog新版本支持了 Iceberg 数据湖开放表格式,同时支持通过 HMS Catalog 查询 Iceberg 表格式的外表和 Hive 表格式的外表。引入 HMS Catalog 旨在构建与 HMS 协议兼容的统一元数据抽象层,通过自动同步多表格式元数据(如 Hudi Timeline、Iceberg Snapshots)、无缝对接主流计算引擎,解决跨系统元数据歧义问题。
-
数据字典调度优化V4.4.1 版本可通过
DBMS_SCHEDULER调度数据字典任务,支持指定调度周期,暂停/恢复调度;支持立即触发调度数据字典的生成;支持回收数据字典历史记录,支持调整字典历史记录保留时间。 -
统计信息增强OceanBase V4.4.1 针对超大分区等资源消耗场景提升收集稳定性,加速列存场景收集速度。优化措施包括大分区表渐进收集、通过维护分区统计信息来加速全局统计信息、调整
SkipRate收集逻辑为最大收集 100 个最大行数的分区等。 - 启动加速新版本优化了 bootstrap 和创建租户的性能。在分布式版本下,bootstrap 的时间优化到到了 20s 以内,创建租户的时间优化到了 12~14s;在单机版本下,observer 启动加 bootstrap 以及创建租户的总耗时优化到了 8s。
-
存储优化OceanBase V4.4.1 版本支持带计算的聚合下压到存储层执行,包括带
GROUP BY的聚合,同时支持了count_sum()的下压。此外新版本提供了新的 Flat 行存储格式,新的 Flat 行存储格式在读写性能上有不同程度的提升,且在稀疏行场景下更节省空间。新增表级属性micro_block_format_version的租户级配置项default_micro_block_format_version来控制行存储格式。当表的micro_block_format_version = 2或 租户配置项default_micro_block_format_version=2且表未指定micro_block_format_version属性时,该表将启用新的 Flat 行存储格式存储表的 memtable,mini sstable, minor sstable 以及ROW_FORMAT指定为 FLAT 格式时的 major sstable 数据。 - 外表支持 JDBC 插件用户可以通过外表直接访问外部数据源,比如通过外表访问存储在 OSS 上的 CSV 文件、访问 ODPS 数据。V4.4.1 版本支持通过外表 JDBC 插件访问 JDBC 支持的数据源,本版本支持 MySQL 数据源,其他数据源将在未来迭代支持。
-
Sequence Wrap around 清空缓存为了避免多个节点负载不均导致的 sequence 取值冲突的问题,新版本支持在 sequence 发生 wrap around 时主动清空缓存,同时新增
CLEAN SEQUENCE CACHE的命令,用于主动清除 sequence cache,以便发生问题后能快速恢复。 - 备库支持 flashback 接入新主库V4.4.1 之前的版本中,如果是一主一备的部署模式,主库不可用,备库 Failover 成主库之后。当用户需要为新主库搭建一个备库时,如果新主库的日志还没有被回收,可以创建一个空的网络备租户,从零开始同步日志。如果新主库的日志已经被回收了,则只能先让新主库物理备份并归档日志,然后基于物理备份恢复出来一个备租户。如果是一主多备的部署模式,主库发生故障时,其中一个同步位点较大的备库将 Failover 成主库,在老版本中另一个备库只能作废,需要给新主库重新搭建一个备库。整个新备库的创建流程十分复杂。V4.4.1 版本中备库支持 flashback 接入新主库,一主多备的部署模式,当主库发生故障时,其中一个同步位点较大的备库将 Failover 成主库。通过日志 flashback 运维命令,可以将同步位点较小的主库接入新备库。一主一备的部署模式,利用旧主备份搭建一个备库,通过日志 flashback 运维命令,可以将这个备库接入新主库。
-
Java UDF 完善新版本持续完善 Java UDF,通过支持 Java UDF 向量化执行等技术改造大幅提升 Java UDF 的性能。同时 Java UDF 执行时间受
ob_query_timeout的限制,解决死循环问题。此外支持 Java 用户自定义聚合函数(Java UDAF)以及自定义表函数(Java UDTF)等功能。
MySQL 兼容性增强
- Python UDFOceanBase v4.4.1 版本上支持了 MySQL 模式的 Python UDF。通过支持 Python UDF,可以将大量 Python 生态产品融入 OceanBase,提升 UDF 的开发效率。此外,实现高度兼容 ODPS,用户仅需少量改动即可复用已有的 ODPS Python 脚本,增强了 OceanBase 在 AP 等场景的竞争力。
OBKV/多模数据增强
- OBKV 增强在 OBKV-Table 中支持 Json 数据类型,目前仅支持 Json 文本的读写,不支持相关的 Json 表达式。详情请参见OBKV-Table。OBKV-HBase分布式执行开关由默认关闭调整为默认开启。Reverse Scan 功能适配二级分区表,对于不同分区类型的二级分区表,均可使用 Reverse Scan 功能。详情请参见OBKV-HBase。新版本对 OBKV-HBase 的兼容性做了一系列能力增强。新增Admin、RegionLocator、RegionMetrics 等接口,支持业务生态到 HBase 的全链路平迁 OBKV-HBase,支持建表时设置 kv_attributes,以此来实现分区分裂、OBCDC 同步等场景对 OBKV 表的识别。详情请参见OBKV-HBase。另外,新版本还通过 hbase put 操作优化、分区计算逻辑优化、客户端lsop请求序列化优化等多项优化手段提升了 OBKV-HBase 的性能。。此外OBKV-HBase支持堆组织表,解决了写入流程中主键冲突和转储合并耗费了大量的 IO 带宽的问题。详情请参见OBKV-Table 数据模式。
-
半结构化编码优化V4.4.1 版本对半结构编码功能进行了优化,进一步降低了 JSON 数据存储所需的存储空间,提升了查询和导入性能,并提供通过表级属性
semistruct_properties设置freq_properities来控制频繁列阈值。详情请参见半结构化编码。 - domain index 优化新版本针对 AI Search 场景,即 RAG 和混合检索场景,优化了全文索引功能及性能。通过稀疏检索裁剪优化及无主键表优化提升全文索引的性能,并支持了 ElasticSearch 在混合检索场景下的若干常用功能点,将其对应的 SQL 语法融入 OceanBase,包括:field 权重、token 权重、mininum_should_match、boost、multi_match、归一化等。
向量检索增强
- ARM 架构优化V4.4.1 版本在ARM架构下通过 neon 向量化优化 VSAG 实现的所有算子的计算效率及 L2 距离和 IP 距离的计算性能,提升向量索引在 ARM 架构下的查询性能和构建性能。
- IVF 索引优化新版本通过增加对 IVF 聚类中心、码表的缓存,以及减少查询流程中的内存消耗,提升查询性能;通过并行化处理 IVF 索引构建,提升构建性能;新增 nbits 参数指定 PQ 量化的 Kmeans 聚类中心个数,同时完善 IVF 索引对 cosine、ip 距离算法支持。详情请参见创建向量索引。
- 小规格向量检索优化V4.4.1 版本提升小规格下基于内存的 HNSW 索引性能。
- **混合检索(Hybrid Search)**新版本支持了混合检索能力。混合检索是指同时进行基于向量的语义搜索及基于全文索引的关键词搜索,再将两者检索结果进行综合排序,以提供更准确的搜索结果。其必要性在于向量检索仅提供语义上的近似检索能力,对于关键字特别是数字,专有名词等的匹配效果不优,全文检索能可以弥补这部分缺失,两者结合使用可实现更优的检索效果。详情请参见混合检索。
-
AI 函数(AI Function)服务AI Function 是通过 SQL 表达式来使用 AI 模型直接处理存储与数据库内的数据。它能极大的简化使用用 AI 大模型对数据进行分析,总结,特征提取等流程的复杂度。新版本新增了
DBMS_AI_SERVICEPL 包,用于管理 AI FUNCTION 使用到的模型,并新增 AI MODEL 权限管理的相关命令,同时新增三个 AI FUNCTION 表达式(AI_COMPLETE/AI_EMBED/AI_RERANK),通过构造各个厂商的消息格式,借助 HTTP API 实现 SQL 直接访问大模型。详情请参见AI 函数服务。 - 无主键表 JSON 多值索引及向量索引结构优化在当前的 JSON 多值索引和稀疏向量索引,索引表中没有直接存储 rowkey,而是存储的 docid,通过 rowkey-docid/docid-rowke 两张索引辅助表来记录 docid 和 rowkey 的关系。HNSW 向量索引中,索引表中存储的是 vid,通过 rowkey-vid/vid-rowkey 两张索引辅助表来记录 vid 和 rowkey 的关系。新版本针对无主键表场景,对 JSON 多值索引、稀疏向量索引及 HNSW 向量索引的组织方式进行了优化,使用隐藏主键替代 docid/vid,从而可以省去 rowkey-vid/docid、vid/docid-rowkey 索引辅助表及相关的操作流程,进而优化相关索引的性能。
性能提升
- UDF 性能优化V4.4.1 版本通过 PL 执行框架优化、package 变量序列化开销优化、package 变量读写开销优化等措施对UDF执行性能进行了专项优化,优化后 TPC-DAS 部分测试用例的性能提升在 15% 到 26% 之间。 另外,为了提升 UDF 在 SQL 中的执行性能,新版本针对标记 RESULT_CACHE 或 DETERMINISTIC 子句的 UDF 支持了结果缓存功能,不能进行结果缓存的场景也对执行路径做了针对性优化。另外,新版本 UDF 适配了向量化框架,大部分场景可由单行执行优化为向量化执行。
- MySQL 模式 PL Continue Handler 优化V4.4.1 版本对 MySQL 模式 Continue Handler 功能进行了重构,解决了 CG 过程中消耗过多 CPU 和内存的问题,同时优化了异常处理流程,降低 Continue Handler 场景对 Resolve、Execute 阶段的性能影响,提升了编译性能。
- PS Cursor 性能优化OceanBase PS Cursor 目前为单线程非流式执行,性能不优。V4.4.1 版本开始,将 PS Cursor 从单线程非流式执行优化为双线程非流式执行,充分利用 client-server 之间交互的时间差,提升 PS Cursor 性能。在大查询 Fetch 前 N 行和 Fetch 所有行的场景,分别有 77% 和 90% 左右的性能提升。
- 外表查询性能优化OceanBase V4.4.1 针对外表查询场景,新增外表缓存、prebuffer 预取、IO 合并、一致性 Hash Location 等优化;针对 Parquet、ORC 文件外表,还支持了 file、rowgroup 级别的 Filter 下压;优化了文件外表的查询性能,提升 parquet、orc 文件的读取速度。性能有较明显提升。
- PL 性能优化V4.4.1 版本通过优化硬解析阶段构造 Recordtype 的热点开销以及 package 编译场景内存使用等措施对 PL 硬解析性能进行了优化,优化后部分包如 PKG_BUSINREVERSE 的解析耗时从 2.8s 降到了 2.4s,提升 14% 左右。
- 并行执行优化V4.4.1 通过将并行执行在各个节点分配 DOP 的策略从依照分区数改为依照数据量,解决分区不均衡场景执行慢的问题;针对性优化了 PX 执行中对于表达式序列化、计划拷贝等性能开销较高的问题。
-
SQL 硬解析优化此外,V4.4.1 版本通过优化 Merge Join 路径裁剪优化、提高表达式 Formalize 效率、去重热点优化、location cache 批量刷线优化、动态采样 Plan Cache 命中优化等技术手段从解析时间和内存占用两个维度对超复杂的 SQL 的硬解析进行了优化,对于插入几千万行的
INSERT语句和AND/OR谓词嵌套很深、UNION分支上百、查询的表分区上千的查询语句有明显的有限效果。 - Batch DML 性能优化通过在存储层实现真正的批量接口,在诸如 batch insert、delete 大量数据、insert on duplicate key update 等 Batch DML 场景的性能得到明显的提升。
- Multi Get 性能优化新版本通过列存扫描支持使用行存投影、keep order 扫描支持 blockscan、行存格式下压 filter 支持向量化、keep order 扫描支持 blockscan 等优化措施,提升了回表查询性能,尤其对于数据量比较大的场景下提升较为明显,对行列冗余的宽表投影多列(大于 80 列)的场景也有较明显的性能优化效果,此外也提升向量化 nest loop join 场景下的扫描性能。
- 分布式执行性能优化新版本通过全局索引回表优化、List 分区裁剪优化、分布式场景下的 GTS 访问优化等手段显著提升了分布式执行场景性能。
- 旁路导入性能优化在旁路导入中,数据行的排序是一个可优化的性能瓶颈。数据行会聚集生成一个 chunk,单个 chunk 写满后会按照主键对数据行排序,OceanBase V4.4.1 版本通过将排序算法从快排替换为 Adaptive Quicksort 算法以及多列变长编码优化排序效率。旧方案中两行数据的比较需要逐列比较主键列,新方案中主键列编码在一起,只需要比较一次。 另外,新版本针对旁路导入的执行逻辑也进行了性能优化,包括旁路导入排序算法、旁路导入向量化路径、CSV 解析、column_conv 表达式、cs encoding 相关,在列存非分区堆表场景下,性能有最高 10% 的提升。
- 启动加速新版本优化了 bootstrap 和创建租户的性能。在分布式版本下,bootstrap 的时间优化到到了 20s 以内,创建租户的时间优化到了 12~14s;在单机版本下,observer 启动加 bootstrap 以及创建租户的总耗时优化到了 8s。
- 并行删除及创建视图OceanBase V4.4.1 支持普通视图的并行创建以及并行删表能力,提高了 OMS 结构迁移的效率。
- 空表创建索引速度优化V4.4.1 版本大幅缩短空表创建索引的时间,分区越多的场景提升效果越明显。非分区表大约提速两倍,16 分区提速 8-16倍,1024 分区提速 16-40倍。
- 小规格 OLTP 性能优化V4.4.1 版本针对 OLTP 场景进行了专项性能优化,包括 ARM 编译 PERF 默认打开 BOLT 优化、唯一索引单行查询规避 range scan,通过 table get 方式返回等。
安全强化
- External Location 对象新增 External Location 对象,用于存储外表、临时外表所访问的路径和鉴权信息。支持对 External Location 对象进行权限管理,具有 Location 对象权限的用户才能访问该路径下的数据,从而增强外部数据访问控制能力。
易用性提升
- CSV 导入诊断增强OceanBase 支持在 load data 导入数据过程中,进行错误诊断并记录错误行的信息,但当前只记录了部分错误信息到 Warning buffer,可能存在数据记录不全的问题。V4.4.1 版本新增将所有错误日志导出到外部文件的能力,同时为了方便用户查看以及修改会导致导入失败的错误数据,还支持将这类数据导出到 bad 文件。
- RPC IO 线程动态生效配置项 net_thread_count 用来控制集群中 OBServer 节点 SQL 和 RPC 的网络 IO 线程数,默认值为 0,需要重启生效,不易用。V4.4.1 版本调整为可动态生效。同时,支持了不同 RPC 连接在不同 IO 线程上的自动均衡,以保证不同 OBServer 节点配置项生效的时间不一致时,不同 RPC IO 线程上的连接也能处于一个均衡的状态。
- SQL 级实时内存展示历史版本 SQL AUDIT 已记录执行完成的 SQL 内存信息,但缺少实时内存信息展示。在一些业务场景,需要监控内存整体的使用信息,在内存使用量达到一定比例时,告警当前占用内存较高的 SQL,便于进行后续的运维操作。V4.4.1 在 [G]V$OB_PROCESSLIST 增加 SQL/PL 级实时内存资源使用统计,可用于实时 TOP N SQL 展示。
- SQL AUDIT 信息完善基于业务诊断诉求,V4.4.1 在 [G]V$OB_SQL_AUDIT 中增加用户客户端端口、事务信息及 PL 编译时间等描述字段。
- Query ProfileV4.4.1 版本实现了 Query Profile 功能,支持交互式查询,能以结构化的输出展示一条 query 的基本信息、热点信息,同时提供原始数据,支持外部工具进行 UI 化适配展示。Query Profile 功能提升 SQL PLAN MONITOR 的指标丰富度、拓展性、易用性。
-
Database 下用户表的聚合
- V4.4.1 版本支持了 Database 下用户表的聚合,基于 sharding none 表组,支持了同一 Database 用户表自动聚合、多 database 用户表聚合。此外支持了 sharding none 表组权重均衡,支持自动聚合的 database 按权重分布。详情请参见表组权重均衡应用案例。
- 同时新增支持基于权重的分区均衡能力,用户可对分区指定权重值,在此基础上分区均衡算法通过分区移动和分区交换的方式,使各个用户日志流上分区权重之和的方差尽量小,进而将业务流量打散。详情请参见设置分区权重。
- 此外均衡任务触发的 Transfer 或迁移操作对前台业务可能会产生一定的影响,为了方便在特定时刻进行运维操作,新版本支持了暂停、恢复均衡任务的功能。详情请参见暂停和恢复 Balance Job。
- 新版本支持了手动创建日志流的命令,通过单独创建日志流并手动 transfer 分区满足需要单独指定表或分区的 primary zone 的场景需求。详情请参见创建日志流。
- SQL 关键字限流SQL 关键字限流支持按用户、IP、数据库、表、SQL 类型(DML)和关键字组合进行限流,提供规则级别和 SQL 级别两种粒度的限流方式。该功能可防止特定 SQL 语句过度消耗资源、避免因资源不足导致的查询超时以及应对突发流量和异常 SQL 访问,保证核心业务不受干扰。
-
向量索引易用性提升随着数据量的增大,用户在使用向量索引的过程中,希望更加清晰的获得向量索引的状态信息,包括每个向量索引占用的内存、索引当前状态、异步任务重建索引的进度等。V4.4.1 版本针对 HNSW 索引和 IVF 索引分别设计了视图
GV$OB_HNSW_INDEX_INFO和GV$OB_IVF_INDEX_INFO,用于展示 HNSW 索引和 IVF 索引的内存占用、索引状态等信息。同时也拓展了视图DBA_OB_VECTOR_INDEX_TASKS和CDB_OB_VECTOR_INDEX_TASKS,新增了一列progress_info用于展示异步任务 running 状态下的具体步骤及执行进度。详情请参见创建向量索引。此外新增向量内存用量估算功能、以及专门观测向量内存占用的视图。向量索引与 memstore 共享 tx_share_memory 的内存额度,总体内存占用不影响节点正常运行,同时,通过参数控制向量索引数据内存的占用。详情请参见创建向量索引。
兼容性变更
产品行为变更
新增如下变更:
| 功能 | 变更说明 |
|---|---|
| 【移除】【三方依赖】cos-c-sdk | 由于 cos 已不再支持 append 写操作,所有依赖 append 写的接口都存在风险,且 cos 驱动本身存在较多稳定性问题,因此移除 cos 驱动。受影响的对象存储模块包括:共享存储、备份恢复、外表(V4.2.x 不支持 cos)、导出、旁路导入。 |
| ob_vector_memory_limit_percentage | 默认值及含义变更: |
-
旧值:
- 当设置为
0时,表示禁用向量索引功能。 - 取值范围受限于租户总内存,需满足
(memstore_limit_percentage + 15% + ob_vector_memory_limit_percentage) < 100%。
- 当设置为
-
新值:
- 当设置为
0时,启用自适应模式(与_memstore_limit_percentage行为一致):- 内存规格为 8G 及以下(真实 Memory)的租户,向量索引配置比例为 40%。
- 内存规格为 8G 以上的租户,向量索引配置比例为 50%。
- 取值范围不再受旧有内存约束,而是与
memstore共享租户内存中的tx_share总体内存。|
- 当设置为
视图变更
新增如下变更:
| 视图 | 变更类型 | 变更说明 |
|---|---|---|
| DBA_OB_LS_REPLICA_TASKS | 新增列 | 新增 CONFIG_VERSION 列,记录容灾任务执行时 clog 层的 config_version 信息。 |
| CDB_OB_LS_REPLICA_TASKS | 新增列 | 新增 CONFIG_VERSION 列,记录容灾任务执行时 clog 层的 config_version 信息。 |
| V$OB_LS_REPLICA_TASK_PLAN | 新增列 | 新增 CONFIG_VERSION 列,记录容灾任务执行时 clog 层的 config_version 信息。 |
| DBA_OB_LS_REPLICA_TASK_HISTORY | 新增列 | 新增 CONFIG_VERSION 列,记录容灾任务执行时 clog 层的 config_version 信息。 |
| CDB_OB_LS_REPLICA_TASK_HISTORY | 新增列 | 新增 CONFIG_VERSION 列,记录容灾任务执行时 clog 层的 config_version 信息。 |
| [G]V$OB_RESULT_CACHE_OBJECTS | 新增 | 展示标记 result_cache 的 UDF 执行期建立的 result cache 中缓存对象信息。 |
| DBA_OB_EXTERNAL_RESOURCES | 新增 | 用于展示已上传的资源文件。 |
| CDB_OB_EXTERNAL_RESOURCES | 新增 | 用于在系统租户下展示所有已上传的资源文件。 |
| (G)V$OB_PROCESSLIST | 新增列 | 新增 double 类型列 TOP_TIM,用于展示 PL 场景下 top_time 列表示整个 PL 执行时间。 |
| (G)V$OB_PROCESSLIST | 新增列 | 新增 varchar 类型列 TOP_TRACE_ID,用于显示顶层语句的 traceid。 |
| CDB/DBA_OB_DATABASES | 新增列 | 新增 TABLEGROUP_NAME 列用于展示 database 绑定的表组名称。 |
| DBA_OB_VECTOR_INDEX_TASKS/CDB_OB_VECTOR_INDEX_TASKS | 新增列 | 新增 process_info 列用于查看正在执行或等待执行的索引任务。 |
| (G)V$SQL_PLAN_MONITOR | 新增列 | 新增 PROFILE 列,用于展示 SQL PLAN MONITOR 拓展监控指标 PROFILE。 |
| (G)V$OB_HMS_CLIENT_POOL_STAT | 新增 | 用于获取所有租户对应的创建的 hms catalog 客户端池化状态统计信息。 |
| (G)V$OB_HNSW_INDEX_INFO | 新增 | 用于展示 HNSW 向量索引信息。 |
| (G)V$OB_IVF_INDEX_INFO | 新增 | 用于展示 IVF 向量索引的信息。 |
| DBA_OB_EXTERNAL_RESOURCES | 新增列 | 新增 DATABASE_NAME 列用于展示该外部资源所在的数据库名称。 |
| INFORMATION_SCHEMA.ROUTINES | 新增列 | 新增 EXTERNAL_NAME 用于展示外部存储过所在的位置和入口。新增 EXTERNAL_LANGUAGE 用于展示外部存储过程的语言和类型。 |
| DBA_OB_AI_MODELS | 新增 | 用于查询本租户模型信息。 |
| CDB_OB_AI_MODELS | 新增 | 用于系统租户查询所有租户的模型信息。 |
| DBA_OB_AI_MODEL_ENDPOINTS | 新增 | 用于查询本租户模型访问信息。 |
| CDB_OB_AI_MODEL_ENDPOINTS | 新增 | 用于系统租户查询所有租户的模型访问信息。 |
| CDB/DBA_OB_OBJECT_BALANCE_WEIGHT | 新增 | 用于展示用户设置的用户表分区权重,CDB_ 视图仅在系统租户下支持。 |
| DBA/CDB_OB_TENANT_FLASHBACK_LOG_SCN | 新增 | 用于记录 flashback 操作记录。 |
| DBA_OB_CCL_RULES/CDB_OB_CCL_RULES | 新增 | 用于展示租户当前全部的限流规则。 |
| [G]V$OB_SQL_CCL_STATUS | 新增 | 用于记录当前时刻命中对应限流规则的 SQL 数量,用于观测当前系统已设置的限流规则的影响。 |
| [G]V$OB_VECTOR_MEMORY | 新增 | 用于显示租户向量索引模块内存使用统计信息。 |
配置项变更
新增如下变更:
| 配置项 | 变更类型 | 变更说明 |
|---|---|---|
| auto_split_tablet_size | 变更默认值 | 调整自动分裂阈值的默认值为 128MB,以解决表级分区数过多影响执行性能的问题。 |
| load_data_diagnosis_log_compression | 新增 | 控制是否需要对诊断日志文件进行压缩,以及使用什么压缩算法。 |
| load_data_diagnosis_log_max_size | 新增 | 控制单个诊断日志文件的大小。 |
| result_cache_max_size | 新增 | result cache 可以使用 library cache 缓存池的最大内存量(以字节为单位),如果值为 0,则表示关闭 result cache 功能。 |
| result_cache_max_result | 新增 | 单个 result cache 缓存对象最多能使用 result_cache_max_size 指定的内存比例。 |
| ob_result_cache_evict_percentage | 新增 | result cache 内存淘汰水位线,result cache 内存占用量达到水位线时,尝试清理缓存对象。 |
| ob_deterministic_udf_cache_max_size | 新增 | 标记语句执行期,所有 deterministic 的 UDF 的缓存池总共可以使用的最大内存量(以字节为单位),如果为 0,则关闭执行期缓存功能。 |
| external_table_io_hole_size | 新增 | 设置两个连续 IO 范围之间的最大距离(以字节为单位)。超过此值,范围将不会合并。 |
| external_table_io_range_size | 新增 | 设置合并范围的最大大小(以字节为单位)。如果合并两个连续范围会产生大于此大小的范围,则不会合并它们。 |
| ob_enable_java_udf | 新增 | 是否启用 Java UDF 功能。 |
| ob_enable_utl_http | 新增 | 集群级配置项,用来控制 UTL_HTTP 系统包功能是否开启。默认为 FALSE,表示不开启。 |
| enable_database_sharding_none | 新增 | 租户级配置项,用于控制创建 database 时用户表自动聚合的开关。 |
| ignore_replay_checksum_error | 变更配置项 | 默认值从 False 变更为 True,表示默认忽略从 memtable 回放校验和验证引发的数据正确性错误码。 |
| ob_python_home | 新增 | 集群级配置项,用户使用 Python UDF 功能前必须通过此配置项指定 observer 所在节点的 Python 路径。默认值为""; |
| ob_enable_python_udf | 新增 | 租户级配置项,用于是否可以使用 python UDF 的开关。默认值为 False,表示不可用。 |
| external_table_disk_cache_max_percentage | 新增 | 集群级配置项,用于 SN 模式下控制外表磁盘缓存 /datafile_size 的最大占比,取值 [0, 95],默认值为 50。 |
| default_micro_block_format_version | 新增 | 租户级配置项,用于指定创建表时默认的微块存储格式版本号。 |
| log_storage_warning_trigger_percentage | 新增 | 集群级配置项,用于触发日志盘故障的写入性能百分比阈值。值越大,故障探测算法越灵敏,默认为 0,范围 [0, 50]。 |
| ls_scale_out_factor | 新增 | 租户级配置项,该参数用于控制租户在每台服务节点上日志流的个数。在关闭 Transfer 的情况下,用户可以通过调整日志流副本或者日志流 Leader 的分布来实现灵活扩缩容。取值范围为 [1,10],默认值为 1。 |
| mds_compaction_mid_thread_score | 新增 | 租户级配置项,用于设置中优先级的 mds compaction 的 DAG 线程数。默认值为 0。 |
| mds_compaction_high_thread_score | 新增 | 租户级配置项,用于设置高优先级的 mds compaction 的 DAG 线程数,默认值为 0。 |
| mds_minor_compact_trigger | 新增 | 租户级配置项,用于控制触发 mds minor 的 sstable 数量,当 mds sstable 总量达到 trigger 时,所有 sstable compact 生成新的 mds minor sstable。默认值为 2。 |
| dump_data_dictionary_to_log_interval | 变更取值范围和默认值 | 修改配置项的取值范围,支持设置为 0;配置为 0 时,表示不会通过配置项路径触发生成数据字典。默认值从 24 小时调整到 0 小时。 |
| auto_split_tablet_size | 变更默认值 | 将默认值从 128MB 调整为 2G。 |
| global_index_auto_split_policy | 变更默认值 | 默认在所有场景都将全局索引默认开启分裂。 |
| ob_vector_memory_limit_percentage | 默认值及含义变更: |
-
旧值:
- 当设置为
0时,表示禁用向量索引功能。 - 取值范围受限于租户总内存,需满足
(memstore_limit_percentage + 15% + ob_vector_memory_limit_percentage) < 100%。
- 当设置为
-
新值:
- 当设置为
0时,启用自适应模式(与_memstore_limit_percentage行为一致):- 内存规格为 8G 及以下(真实 Memory)的租户,向量索引配置比例为 40%。
- 内存规格为 8G 以上的租户,向量索引配置比例为 50%。
- 取值范围不再受旧有内存约束,而是与
memstore共享租户内存中的tx_share总体内存。|
|vector_index_memory_saving_mode|新增|租户级配置项,用于指定是否开启向量索引省内存模式,打开后可以降低分区表向量索引 rebuild 使用的内存。默认值为 True。|
|load_vector_index_on_follower|新增|租户级配置项,用于指定指定 follower 是否自动加载内存向量索引。默认为 True。|
|approx_count_distinct_precision|新增|租户级配置项,用于配置 approx_count_distinct 函数的结果精度。取值范围为 [4, 16],默认值为 10。|
- 当设置为
系统变量变更
新增如下变更:
| 系统变量 | 变更类型 | 变更说明 |
|---|---|---|
| PLSQL_OPTIMIZE_LEVEL | 变更默认值 | 为了进一步加速 PL 编译,将 PLSQL_OPTIMIZE_LEVEL 默认值从 2 到 0。变更之后可以大幅缩短 PL 编译时间。 |
语法变更
新增如下变更:
| 语法 | 变更说明 |
|---|---|
| CREATE EXTERNAL TABLE T1 新增 API_MODE 选项 | ODPS 外表建表新增选项 API_MODE 帮助表选择 API。 |
| 新增 hint:opt_param(‘orc_filter_pushdown_level’, ‘4’) | 用于控制语句级别 orc 外表条件下压级别,功能均和配置项 _orc_filter_pushdown_level 保持一致。 |
| 新增 hint:opt_param(‘parquet_filter_pushdown_level’, ‘4’) | 用于控制语句级别 parquet 外表条件下压级别,功能均和配置项 _parquet_filter_pushdown_level 保持一致。 |
| LOAD DATA 语句 | LOAD DATA 语句新增指定导出错误日志路径以及错误数据路径。新增语法查询错误日志:SELECT * FROM read_error_log(’${diagnosis_log_path}’); |
| MATCH (col1,col2,…) AGAINST (expr [search_modifier]),其中 search_modifier 新增 IN MATCH PHRASE MODE | 支持关于 expr 的短语匹配。 |
| CREATE LOCATION relation_name url = credential = (…) | 创建 external location,目前支持的存储类型有:本地文件、hdfs、oss、cos 和 s3 |
| DROP LOCATION relation_name | 删除 external location |
| SHOW CREATE LOCATION relation_name, SHOW LOCATIONS | 查看当前租户下的 location |
| GRANT PRIVILEGES ON LOCATION relation_name TO user | 授予用户对某个 location 对象的权限 |
| REVOKE PRIVILEGES ON LOCATION relation_name FROM user | 撤销用户对某个 location 对象的权限 |
| CREATE EXTERNAL TABLE relation_name LOCATION = @<loc_name>; | 在原有创建外表语句上新增支持使用 location 对象 |
| SELECT * FROM FILES(LOCATION = @relation_name, FORMAT(TYPE = ‘PARQUET’)); | 在原有临时外表语句上新增支持使用 location 对象。 |
| SHOW FILES IN LOCATION relation_name; | 查看 location 下存在的文件 |
| REMOVE FILES IN LOCATION relation_name; | 删除 location 下的文件 |
| DBMS_HYBRID_SEARCH | 新增 dbms_hybrid_search 包用于混合查询。提供两个包函数 search() 和 get_sql() 分别用于执行混合查询和获取混合查询执行的 SQL 语句。 |
执行混合查询:FUNCTION SEARCH (IN table_name VARCHAR(65535),IN search_params LONGTEXT)RETURN JSON;
获取混合查询执行的 SQL 语句:FUNCTION GET_SQL (IN table_name VARCHAR(65535),IN search_params LONGTEXT)RETURN LONGTEXT;|
|备份清理相关语法|* 新增 ALTER SYSTEM DELETE BACKUPSET 语句,支持清理指定备份集。
- 新增
ALTER SYSTEM DELETE ARCHIVELOG_PIECE语句,支持清理指定归档日志片。 -
ALTER SYSTEM ADD/DELETE BACKUP POLICY语句的POLICY参数新增log_only取值,用于管理日志备份清理策略。 - 新增
ALTER SYSTEM DELETE OBSOLETE BACKUP语句,支持手动触发过期备份清理。|
|新增 AI_Function 相关语法|* 新增AI_COMPLETE(model_key, prompt [, model_parameters])用于调用文本生成模型,利用提示词完成模型处理数据的任务,例如:情感分析、总结等场景。 - 新增
AI_EMBED(model_key, input, [dim])来调用嵌入模型将文本转换为向量格式的数据。 - 新增
AI_RERANK(model_key, query, documents [, document_key])用于使用指定的模型针对 query 对输入的文本进行重排。|
|修改 index merge 功能相关 hint|* 新增/*+ index_merge */用于控制指定的表使用 index merge 计划; - 新增
/*+ no_index_merge */用于控制指定的表不使用 index merge 计划。 - 移除用于控制指定的表生成单层的 union merge 计划的 hint
/*+ union_merge */。|
|新增用于设置和删除 sharding none 表组权重的语法|系统包 DBMS_BALANCE 中新增语法SET_TABLEGROUP_BALANCE_WEIGHT和CLEAR_TABLEGROUP_BALANCE_WEIGHT分别用于设置和删除 sharding none 表组权重的语法。|
|新增创建 catalog 当中的属性字段用于访问 HMS 服务|示例语法:CREATE EXTERNAL CATALOG [IF not EXISTS] relation_name PROPERTIES [=] ( TYPE = 'HMS', URI = '<string>', [KRB5CONF = "<string>", KEYTAB = "<string>", PRINCIPAL = "<string>", MAX_CLIENT_POOL_SIZE = <int>, SOCKET_TIMEOUT = <int> ] );|
|新增 catalog 属性字段用于管理cache刷新时长|示例语法如下:CREATE EXTERNAL CATALOG [IF not EXISTS] relation_name PROPERTIES [=] ( ... CACHE_REFRESH_INTERVAL_SEC = 10 );|
|新增创建 AI Model 的语法|DBMS_AI_SERVICE.create_ai_model(IN name VARCHAR(128), IN params JSON);|
|新增删除 AI Model 的语法|DBMS_AI_SERVICE.drop_ai_model(IN name VARCHAR(128));|
|新增创建 AI Model 访问信息语法。|DBMS_AI_SERVICE.create_ai_model_endpoint(IN name VARCHAR(128), IN params JSON);|
|新增修改 AI Model 访问信息的语法|DBMS_AI_SERVICE.alter_ai_model_endpoint(IN name VARCHAR(128), IN params JSON);|
|新增删除 AI Model 访问信息的语法|DBMS_AI_SERVICE.drop_ai_model_endpint(IN name VARCHAR(128));|
|新增用于 root 用户授予/回收 其他的用户 创建/修改/删除/访问所有 AI MODEL 的权限的语法|GRANT/REVOKE CREATE/ALTER/DROP/ACCESS AI MODEL TO 'username'@'host';|
|新增用于 root 用户授予/回收 其他的用户 修改/删除/访问某个 AI MODEL 的权限的语法|GRANT/REVOKE ALTER/DROP/ACCESS AI MODEL ‘model_name’ TO ‘username’@‘host’;|
|新增 ES 全文查询 SQL 语法支持|* 新增SCORE()表达式。SCORE()作为MATCH语法的搭配使用,单独出现无意义。表示为对where后所有MATCH语句的相关性进行计算,默认为累加。 - 新增
MATCH ('col1[^n],col2[^n]....', 'expr', [parameters]),MATCH会作为where后字段,表示过滤语义,如需计算分数需要搭配SCORE()使用。|
|新增 FLUSH SEQUENCE CACHE 用于主动清除 sequence 本地 cache|*ALTER SYSTEM FLUSH SEQUENCE CACHE SEQUENCE_NAME = 'xxx' [DATABASES = 'yyy'] [TENANT = 'zzz'] [GLOBAL]; -
sequence_name = 'xxx'表示清除名称为'xxx'的 sequence 的本地 cache,必须指定 -
tenant = 'zzz'表示在名称为'zzz'的租户下执行本操作,sys 租户下必须指定租户,其他租户下不指定则在当前租户下执行。 -
databases = 'yyy'表示在名称为'yyy'的 database 下执行本操作,如果不指定则在当前 database 下执行。如果指定了 tenant,则必须指定 database。 -
global表示清除所有节点上的缓存,如果不指定则只清除本节点缓存。|
|新增设置半结构化编码频繁列阈值语法|通过在建表属性semistruct_properties中指定freq_threshold的值来设置频繁列阈值。示例: 建表开启半结构化,并且设置频繁列阈值为 90create table t1(j json) row_format=compressed semistruct_properties=(encoding_type=encoding, freq_threshold = 90);|
|新增 hintdisable_op_rich_format(op_list)|该 hint 的作用是在计划中把op_list中指定的物理算子回退到向量化 1.0。示例:select /*+disable_op_rich_format('table_scan','hash_group_by')*/ * from t group by a;|
|新增聚合函数 arg_max/arg_min|语法示例:* 从 t1 表中找到 c2 最小的行,并且返回该行的 c1 值(跳过 NULL 的值)。如果指定了 distinct,会对 c1 进行去重处理。select arg_min([distinct] c1, c2) from t1; - 从 t2 表中找到 c2 最大的行,并且返回该行的 c1 值(跳过 NULL 的值)。如果指定了 distinct,会对 c1 进行去重处理。
select arg_max([distinct] c1, c2) from t2;|
|新增表属性 micro_block_format_version 用于指定表的微块存储格式版本号|* 取值为 1 表示建表启用新的 Flat 行存储格式。 - 取值为 2 表示关闭新的 Flat 行存储格式。
- 示例语法:
CREATE TABLE tb(c1 INT PRIMARY KEY, c2 INT) micro_block_format_version = 2;|
周边配套
OceanBase 数据库 V4.4.1 推荐使用的平台工具版本如下:
| 组件 | 版本 | 备注 |
|---|---|---|
| ODP | V4.3.5 | |
| OCP | V4.3.6_BP1 | |
| OBD | V4.0.0 | 预计 11 月中旬发布,届时推荐升级使用 |
| OBCDC | V4.4.1 | |
| OMS | V4.2.11 | 预计 11 月初发布,届时推荐升级使用 |
| OBClient | V2.2.10 |
升级说明
社区版 V4.4.1 集群仅支持全新安装,不支持版本升级。
注意事项
-
全文索引相关
- 仅支持局部索引,不支持全局索引。
- 全文索引列可包含多个列,必须所有列字符集一致。
- 不支持自定义停词、中文分词器不支持自定义词典。
-
向量相关
- 不推荐随表创建 IVF 相关的索引。
- 建议导入完成数据以后,再创建 IVF/IVF_PQ 索引。
- 创建 HNSW、HNSW_SQ、HNSW_BQ 属于内存索引之前利用内部包估算内存使用,提前预留足够内容以免报错
4013。 - 向量索引是局部索引,不支持全局向量索引。
-
外表、catalog 相关
- 支持读 Iceberg V1 和 V2 两种版本,V3 暂不支持。
- 支持 Iceberg 的读取文件格式为 Parquet 和 ORC,Avro 暂不支持。
- 不支持 Iceberg Time Travel。
- 支持读 Hive 上 Parquet/ORC/Textfile/OpenCSV 四种文件格式。
- 外表复杂类型暂时只支持了 读 Parquet 文件的 ARRAY 类型,MAP 和 STRUCT 暂不支持。
- 支持 Java 环境设置下,可以用 odps catalog,并支持读 ARRAY 类型。
- 支持 Java 环境设置下,写入 odps 时可以自动创建新的分区。