MatrixOne v26.4.0.0-rc2 发布说明

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

MatrixOne 4.0.0-rc2 是紧随 v4.0.0-rc1 的补丁版本。此版本修复了 rc1 中引入的若干 Bug,包括 SET SECONDARY ROLE ALL 错误地切换主要角色的问题,并改进了角色改写规则校验。同时引入了一个新的系统变量 sort_spill_mem,用于控制 merge-order 溢写内存。

新功能

系统变量:sort_spill_mem

新增系统变量 sort_spill_mem,用于控制 merge-order 执行中排序溢写(sort spill)操作的内存限制。当排序操作超过配置的内存阈值时,中间数据将被溢写到磁盘。

  • 作用域: Global 和 Session

  • 动态:

  • 类型: 整数(字节)

  • 默认值: 0(禁用——不限制溢写)

  • 范围: 0 到 1099511627776 字节(1 TiB)

使用 SET sort_spill_mem = <字节数>; 为大排序操作启用溢写。值为 0 时禁用限制。

行为变更

SET SECONDARY ROLE 修复:保留主要角色

Bug 修复 / 行为变更。 在 v4.0.0-rc1 中,SET SECONDARY ROLE ALL 错误地将用户的主要角色切换为 role_id 最小的角色。此问题已修复:启用次要角色时,主要角色现在被正确保留。

此外,SET SECONDARY ROLE ALLSET SECONDARY ROLE NONESET ROLE 现在执行时会正确失效特权缓存和规则缓存,确保角色变更立即生效,无需重新连接会话。

角色改写规则校验改进

行为变更。 ALTER ROLE ADD RULE 现在在任何 catalog 写入之前校验规则 SQL。改进后的流程立即拒绝无效规则:

  • 语法错误返回 invalid rewrite rule SQL

  • 非 SELECT 语句(如 DELETEINSERT)返回 only accept SELECT-like statements as rewrites

  • 空规则返回 rewrite rule SQL is empty

已有规则在校验失败时不会被覆盖。

角色切换时的规则缓存失效

SET SECONDARY ROLE ALLSET SECONDARY ROLE NONESET ROLE 现在会失效规则缓存。此前,切换角色不会清除缓存的改写规则,可能导致过期规则继续生效。规则缓存在每次角色变更时都会被正确失效。

Bug 修复

POSITION(substr IN str) 语法解析修复 (#24776)

修复了 POSITION(substr IN str) 语法在某些列引用上下文中不被识别的问题(例如 SELECT substr, str, POSITION(substr IN str) AS position FROM t1)。该语法已在文档中记录为 LOCATE() 的同义语法;此修复确保其在所有合法 SQL 上下文中正常工作。

Decimal 除法截断修复 (#24706)

修复了 decimal 整数除法可能产生截断结果而非正确舍入结果的问题。此修复使 decimal 除法行为与 MySQL 语义保持一致。

远程变量表达式折叠修复 (#24801)

修复了会话变量表达式(如 @@sql_mode)在远程执行前未被正确折叠为常量的问题。这导致分布式查询中本地和远程节点使用不同变量值时出现错误行为。会话变量现在在发送到远程节点之前被正确折叠。

CDC Pause 状态对齐 (#24805)

修复了 CDC 任务生命周期中 pause 操作可能跳过 pausing 中间状态的问题。CDC 状态机和 mo_catalog.mo_cdc_task 表中新增了 pausing 状态。CDC 任务现在在达到 paused 之前先经过 pausing,确保 watermark flush 和状态一致性。

数据库恢复:跳过已删除的关系 (#24747)

修复了恢复数据库时遇到已删除关系可能导致恢复操作异常中止的问题。

角色规则缓存排序修复 (#24393)

修复了基于角色规则加载中的非确定性排序问题。角色发现顺序现在同时使用 created_timerole_id 作为排序键,确保跨 CN 重启的确定性规则优先级。

ALTER COPY 索引回填内存优化 (#24751)

修复了 ALTER TABLE ... ALTER COPY 操作中索引回填时内存消耗过高的问题。

ALTER COPY 添加主键预检查 (#24750)

ALTER TABLE ... ALTER COPY 添加主键时增加了预检查,防止因重复键冲突导致操作在中途失败。

Merge Order 溢写实现 (#24785)

为 merge-order 操作实现了完整的溢写到磁盘支持,允许大型排序和合并操作通过将中间结果溢写到磁盘来完成,而不是因内存不足而失败。由新的 sort_spill_mem 系统变量控制。

事务操作符 Wait 失败时关闭修复 (#24788)

修复了事务操作符在 wait 失败时未正确关闭的资源泄漏问题,该问题可能导致长时间持有的锁。

兼容性说明

  • sort_spill_mem 系统变量是本版本新增的,无 MySQL 等价物。

  • SET SECONDARY ROLE ALL 的行为已被纠正——如果你的应用依赖了切换主要角色的 Bug 行为,请检查你的角色管理代码。

  • CDC pausing 状态是 mo_catalog.mo_cdc_task 中可见的新中间状态。

文档同步说明

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

完整变更日志

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