MatrixOne v26.4.0.0-rc1 发布说明

发布日期:2026 年 7 月 9 日 MatrixOne 版本:v26.4.0.0-rc1

MatrixOne 4.0.0-rc1 是一个重大特性版本。此版本引入了快照和数据分支的资源配额管理系统、用于行级安全的基于角色的 SQL 改写规则、面向分析查询的 sidecar GPU 卸载支持、面向 CDC 消费者的 CHECK SNAPSHOT FLUSHED 语句,以及自 v3.0.13 以来累积的大量稳定性和性能改进。

新功能

特性限制系统:资源配额管理

新增系统函数 mo_feature_registry_upsert()mo_feature_limit_upsert(),允许 sys 账户管理员注册特性并为每个账户每个作用域设置配额。支持的内置特性:

  • SNAPSHOT(作用域:accountdatabasetable)— 控制 CREATE SNAPSHOT 配额。

  • BRANCH(无作用域)— 控制 DATA BRANCH CREATE TABLEDATA BRANCH CREATE DATABASE 配额。

配额值:-1(无限制)、0(禁用)、1..32767(上限)。非 sys 账户默认为 50。配额强制在运行时执行而非解析时;更改立即生效;删除资源释放配额。两个函数均仅限 sys 账户调用。

角色改写规则:CREATE RULE / DROP RULE / SHOW RULES

新增基于角色的 SQL 转换 DDL。管理员可以定义规则,为特定角色自动注入 SELECT ... WHERE <条件> 包装,实现行级安全。核心能力:

  • ALTER ROLE <角色> ADD RULE "<sql>" ON TABLE <库>.<表> — 添加改写规则。

  • ALTER ROLE <角色> DROP RULE ON TABLE <库>.<表> — 移除规则。

  • SHOW RULES ON ROLE <角色> — 列出角色的规则。

  • 内联 /*+ remap(...) */ 提示支持逐查询的表和数据库重映射(remapdb)。

  • 多角色规则合并:活跃次要角色的规则通过 WHERE-OR 合并,实现行可见性联合。

  • 继承的角色通过角色授权层次贡献规则。

  • 通过 remap_rewrites 会话变量提供会话级覆盖。

Sidecar GPU 卸载:CALL gpu_execution()

/*+ SIDECAR *//*+ SIDECAR GPU */ 查询提示允许将 SELECT 查询卸载到外部 DuckDB sidecar 加速执行。使用 /*+ SIDECAR GPU */ 时,查询会额外包装在 CALL gpu_execution(...) 中以启用 Sirius GPU 加速。表引用自动重写为指向通过 debug HTTP 端点提供的 TAE manifest 的 tae_scan() 调用。通过 sidecar_url 会话变量或 TOML 配置文件进行配置。

CHECK SNAPSHOT FLUSHED 语句

新增 CHECK SNAPSHOT FLUSHED <快照> <账户> <发布> 语句,验证快照数据是否已完全写入(flush)持久存储,确认 CDC 或跨账户订阅消费者可以安全读取。支持 accountdatabasetable 三个粒度级别。通过发布/订阅模型进行授权。

内部跨账户工具

通过内部命令调度和发布认证可访问的新内部工具:

  • GET OBJECT:从分布式文件服务中按块检索原始对象文件数据,用于跨账户数据同步。

  • OBJECT LIST:列出指定时间范围内属于表的数据对象文件,支持基于快照的差分查询。

  • GET DDL:通过发布授权提取 CREATE TABLE SQL,用于跨账户 DDL 复制。

所有三个工具都需要发布权限验证,并在授权账户的上下文中运行。

发布内部授权

发布相关 DDL(CREATE CDCCREATE PITR 等)上的 INTERNAL 标志将执行限制为仅系统租户。非 sys 租户将收到明确的错误信息:tenant <X> user <Y> is not allowed to execute publication internal command <Z>

改进

数据分支:DIFF 中的 COLUMNS 投影(#24115)

DATA BRANCH DIFF ... COLUMNS (c1, c2, ...) 将每行 diff 的可见值列限制为指定子集。主键仍参与内部匹配和排序,但只有显式请求时才会显示。在宽表上使用可减少负载大小。

数据分支:跨任意深度 DAG 的 Diff/Merge(#24371、#24378)

LCA(最低公共祖先)解析和 collect-range 计算现在跨任意 DAG 深度的分支工作,而不仅限于直接父子关系。支持包含数千个中间祖先的大型 DAG 拓扑。

导出:SELECT INTO OUTFILE 的 Parquet 格式支持

SELECT ... INTO OUTFILE 现在支持 FORMAT 'parquet' 并可配置 SPLITSIZE。所有 MatrixOne 数据类型均支持 Parquet 导出,包括 decimal、JSON、UUID、enum 和向量类型。日期/时间和 decimal 值以字符串形式序列化以保证兼容性。

数据分支:分支保护快照(#24313)

DATA BRANCH CREATE TABLEDATA BRANCH CREATE DATABASE 现在自动在 mo_catalog.mo_snapshots 中创建内部分支保护快照(__mo_branch_<child_table_id>)。这些快照在克隆时间戳处固定父表数据,防止被垃圾回收。分支快照对 SHOW SNAPSHOTS 不可见,被 DROP SNAPSHOT 拒绝,并在整个 DAG 子树被删除时自动回收。

Bug 修复

事务中的 LOCK TABLES(#24422)

修复了显式事务(BEGIN ... COMMIT)中 LOCK TABLES 被错误拒绝的问题。LOCK TABLES 现在允许在事务块内使用。

数据分支:Merge 通道竞态(#24582)

修复了数据分支 merge 通道中的一个竞态条件,该条件可能导致错误的 merge 结果。

数据分支:GC + 重启后 Diff 返回错误结果(#24010)

修复了垃圾回收和 CN 重启后 DATA BRANCH DIFF 可能返回错误结果的问题。

DROP TABLE 外键清理(#24132)

修复了 DROP TABLE 外键级联清理中缺失子表处理的问题。

SHOW CREATE TABLE 中的 CHECK 约束(#24134)

修复了 CHECK 约束在 SHOW CREATE TABLE 输出中未保留的问题。

显式事务长持有泄漏修复(#24105)

修复了后端故障后显式事务可能长时间持有资源的内存泄漏问题。

数据分支:Create Table + DROP DATABASE 竞态(#23788)

修复了 DATA BRANCH CREATE TABLEDROP DATABASE 之间的竞态条件,该条件可能导致孤儿快照记录。

测试与基础设施更新

以下变更为内部基础设施或测试覆盖改进,无新的用户可见 SQL 语法:

  • CDC 状态机 (cdc_state_machine):用于 CDC 任务执行器生命周期管理的内部 Go 状态机组件(ExecutorStateMachine)。定义状态(Idle、Starting、Running、Pausing、Paused、Restarting、Cancelling、Cancelled、Failed)和转换。无用户可见 SQL 面。

  • 字符集/排序规则测试覆盖 (charset_collation):全面的回归测试用例,测试 CHARACTER SET/COLLATE 语法在 CREATE DATABASECREATE TABLEALTER TABLESHOW CHARSETSHOW COLLATION 及相关字符串操作中的使用。这些功能已有文档记录;测试验证了已有功能。

  • TPCDS 基准回归测试 (benchmark):TPCDS 查询正确性问题的测试用例修复(#24208 GROUP BY NULL 分组,#24219 连接合并正确性)。无新 SQL 语法;底层引擎 Bug 已修复。

兼容性说明

  • mo_feature_registry_upsert()mo_feature_limit_upsert() 是新的 sys 专用函数,无 MySQL 等价物。

  • CHECK SNAPSHOT FLUSHED 是 MatrixOne 专有语句,无 MySQL 等价物。

  • 角色改写规则(CREATE RULE / DROP RULE)是 MatrixOne 专有的,无 MySQL 等价物;MySQL 使用基于视图的不同模型来实现行级安全。

  • CDC/PITR DDL 上的 INTERNAL 标志将部分命令限制为仅 sys 租户。非 sys 租户携带此标志调用时将收到明确错误。

  • Sidecar GPU 卸载需要配置外部 DuckDB 和可选的 Sirius GPU 基础设施。

文档同步说明

本文档由文档同步 Agent 根据 MatrixOne v3.0.13 到 v4.0.0-rc1 的源码 diff 自动生成,并通过 PR 进行人工审核。

完整变更日志

v3.0.13 到 v4.0.0-rc1 之间的完整变更列表,请参阅: https://github.com/matrixorigin/matrixone/compare/v3.0.13…v4.0.0-rc1