我们非常高兴地宣布推出 Vitess 19,这是最新版的 Vitess,包含旨在提升数据库系统扩展性性能可用性的一系列增强功能。本次发布标志着 Vitess 团队继续致力于为 MySQL 提供强大的、可扩展的、可靠的数据库集群解决方案。


Vitess 19 的新特性

停止支持 MySQL 5.7

随着 Oracle 在 2023 年 10 月将 MySQL 5.7 标记为生命周期终止(EOL),我们也随之迈出下一步,停止支持 MySQL 5.7。我们建议用户在部署 Vitess 18 时升级到 MySQL 8.0,然后再切换到 Vitess 19。不过,Vitess 19 仍然支持从 MySQL 5.7 导入数据。

即将弃用的功能

为了简化功能并提升维护性,我们清理了部分功能,包括不再支持多个 VTTablet 标志、Docker 镜像 vitess/lite 中的 MySQL 特定标签,以及 EXPLAIN 语句格式的变更。

Breaking Changes(不兼容变更)

特别是现在 ExecuteFetchAsDBA 命令拒绝 SQL 多语句输入,以更严格地执行安全性和稳定性实践。

新增指标

我们引入了用于监控流合并的新指标,并在 /debug/vars 中新增了构建版本信息,以便提供更深入的洞察和追溯能力。

强化查询兼容性

此次版本增加了对多表删除操作的支持、新的 SHOW VSCHEMA KEYSPACES 查询,以及其他数项 SQL 语法增强,使 Vitess 与 MySQL 的兼容性进一步提升。

VSchema 应用增强

我们为 ApplyVSchema 命令新增了 --strict 子标志及其对应的 gRPC 字段,使得 Vindex 的配置文件能够严格验证已知参数,强化了错误检查和配置验证功能。

Tablet 限速器(Throttler)

限速器现仅通过 gRPC 进行通信,不再使用 HTTP,这关闭了一种潜在的安全漏洞路径。

在线 DDL

新增支持锁定时的切换操作回退,以及强制切换功能。

增量备份

支持备份名称和空备份。

表生命周期管理

更快速的表清理流程。

性能改进

包括:针对 Tablet 的新连接池、更快速的分片集群哈希算法,以及 VTGate 中更快的聚合操作。


新特性与更新功能解析

查询兼容性增强

Vitess 19 引入了多个 SQL 语法改进和兼容性功能,其中包括:

  • 在分片键空间上支持使用 SUM 和 COUNT 的组合实现 AVG() 聚合函数;
  • 支持非递归公共表表达式(CTE),允许更复杂的查询构造。

Tablet 限速器(Throttler)

限速器之间的通信现仅基于 gRPC,不再支持 HTTP 通信,此举有效加强了通信安全性。

在线 DDL

Vitess 的迁移切换操作在表锁的情况下现可使用回退机制。如果无法完成切换,后续尝试将在逐步递增的时间间隔进行,以减少对已过载生产系统的影响。此外,在线 DDL 还支持强制切换,这种机制可以设定超时时间或按需触发,优先完成切换操作,即使会影响生产流量,终止与切换操作冲突的查询和事务。

(详见PR。)

增量备份

Backup|BackupShard –incremental-from-pos 标志现可接受备份名称作为备份起点,并允许空的增量备份。即使没有创建备份清单或其他相关文档,Backup|BackupShard 命令也会返回成功状态码。

表生命周期管理

表垃圾回收(GC)机制现能更快速响应需要清理的表,并观察能够生成 GC 表的操作。例如,可以快速捕获 ALTER VITESS_MIGRATION … CLEANUP 命令的结果,并在几秒内将表移至相关生命周期阶段,而不是等待几分钟或小时。


不兼容变更:ExecuteFetchAsDBA

ExecuteFetchAsDBA 命令现不再接受 SQL 多语句输入。此前,允许多语句输入,但结果可能为未定义行为:仅报告第一条语句的错误,而静默忽略后续语句,导致连接状态未定义并可能泄漏结果至后续的连接池用户。此外,直到关闭连接,Schema 跟踪器才会收到变更通知。未来版本将引入正式的多语句支持。


性能改进

新连接池

针对 MySQL 的连接池在 Tablets 中被完全重新设计。新的连接池基于多个无锁栈架构,提供显著更低的查询延迟、更公平的等待时间,以及更高效的空闲连接利用率。这种改进在使用外部 Tablets(如 Tablet 和 MySQL 实例分别部署在不同主机上)的 Vitess 集群,以及包含大量点查询的繁忙 Vitess 集群中尤为显著。

分片集群中更快的哈希算法

此前,为文本列的 VIndex 哈希器使用了 x/text/collate 包,该包会根据被哈希列的长度分配线性内存。我们已将其替换为自定义的、后向兼容的实现,该实现不仅更快且使用恒定内存。这是一项针对包含使用大型文本列作为分片键的表的非常重要性能改进。

跨分片聚合中更快的比较

通过引入 Tiny Weights,使用 ORDER 或 GROUP BY 限定符的跨分片聚合操作的性能得到了显著提升。VTGates 中的查询执行器现在为来自上游分片的所有 SQL 值打上压缩形式的权重字符串标签,从而实现聚合中的常量时间比较。


社区呼吁

我们非常期待看到你如何利用 Vitess 19 扩展你的数据库系统。如往常一样,我们热切希望听到你的反馈和使用体验。欢迎加入我们的 GitHub 或 Slack 频道,与 Vitess 社区分享你的故事、提问或交流。


开始使用

升级至 Vitess 19 过程十分简单,但我们建议在切换前仔细阅读详细的发布说明以确保顺利过渡。请查阅我们的文档以获取全面的指南与建议。



发布 Vitess 19插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.choupangxia.com/2025/09/14/vitess-19/