引言
2025年,是MySQL数据库诞生的第30个年头。
5月23日-5月24日,由ACMUG和MySQL官方联合举办的「MySQL 30周年庆典」活动在成都召开。本次活动不仅是对MySQL 30年发展的总结,更是对未来的技术展望。
作为MySQL技术领域的重要推动者,阿里云瑶池数据库团队持续多年深耕MySQL技术领域,不断为社区贡献Patch和Idea(自2018年起,累计向MySQL社区提交技术提案219项,72个修复方案)。通过代码贡献、技术研讨等,团队在数据库性能优化、事务处理机制完善和高可用架构设计等多个方面,助力MySQL开源生态的技术创新和发展。
本次活动,阿里云数据库RDS产品负责人陈宗志分享《阿里云数据库RDS的自研内核AliSQL的技术演进》演讲,深度解析AliSQL在云存储、DDL场景、Binlog场景等的优化,以及分享AliSQL和DuckDB在HTAP场景上的解决方案。
阿里云数据库RDS产品负责人陈宗志
1、关于MySQL与AliSQL
自1995年诞生以来,MySQL凭借开源特性、易用性及高性能,已成为全球应用最广泛的关系型数据库,广泛服务于互联网、金融、电信、教育等关键领域。30年间,MySQL持续的技术迭代推动了数据库行业的革新进程。
在此背景下,阿里云RDS推出自研内核AliSQL——深度定制的MySQL分支。AliSQL融合阿里巴巴集团多年业务实践与技术积累,为用户构建企业级数据库服务。该内核不仅完整继承社区版MySQL功能,更通过创新实现性能、稳定、安全多方面的突破:提供企业级备份恢复、线程池、并行查询等核心能力,并兼容Oracle特性(如Sequence引擎),全面满足高并发场景下的可靠性与扩展性需求。
AliSQL开发的大部分功能,除了提供给公有云用户的使用,同时也积极开源,其中绝大多数都已经被官方 MySQL/MariaDB/Percona 吸收。阿里云一直秉持拥抱、回馈、融合、回报的思想反哺开源社区。
2、AliSQL在云存储上的优化
云数据库通过计算存储分离架构实现弹性扩展与按需计费,其资源解耦特性显著推动云原生数据库发展。基于通用云存储层构建的方案,既借助规模经济效应降低总体成本,又通过高可靠性特性降低开发与运维复杂度。
然而,云存储与本地存储的物理特性差异导致传统数据库上云面临多重挑战:远程分布式存储的I/O延迟瓶颈制约响应速度;聚合带宽利用率低限制吞吐潜力;长链路传输引发的I/O隔离性不足;云用户倾向数十TB级单表文件不切分,进一步加剧I/O瓶颈。这些技术矛盾直接限制云数据库在云环境下的性能上限与可靠性保障。
针对云存储中存在的问题,AliSQL团队进行了深入研究和优化,通过改进数据读写路径、优化缓存策略、降低系统锁争用等手段,提升了整体性能和稳定性。
1. 快速恢复
AliSQL 通过创新性设计,显著优化了数据库启动阶段的性能。AliSQL在数据库启动时仅扫描元数据,大大缓解了 InnoDB 全文件扫描和解析过程的 IO 压力,降低了耗时。其次,AliSQL采用并行化最小信息单元方式进行数据字典元信息获取,提升了时间效率,并降低了内存资源的使用。优化后,在 100w 表场景下,Crash recovery 下启动时间可缩短 95.2%;数据库启动过程中元数据占用的内存仅为原来的 15.4%。
除此之外,AliSQL 重新实现了崩溃恢复过程中Redo 日志的扫描与应用,采用多线程、流水线的方式对 Redo 日志进行扫描、解析与应用,大幅降低启动时间。优化后,Redo 的应用速度提升 500%以上。
2. IO 路径优化
InnoDB通过双写机制保障数据页原子性,防止半写错误;因此,每次数据页的刷新都涉及两次写操作,这增加了磁盘I/O负载。在高写入场景,InnoDB的双写机制就成为了性能瓶颈。AliSQL 具备全链路的16K原子写的能力,可安全关闭InnoDB双写机制。在降低了I/O写入量的同时,还简化了刷脏过程,大幅度降低云存储的IOPS及带宽需求,提升实例写性能。
3. 数据访问加速
AliSQL 引入缓存池拓展(Buffer Pool Extension)能力,扩展 Buffer Pool 的大小,将数据页缓存到Buffer Pool Extension中,让实例在一定时间内执行更多的读写命令。
引入BPE能够大幅提升数据页的访问速度,缩短SQL执行时间,同时也能大幅降低访问实例高性能云盘中数据文件的频率,降低高性能云盘带宽。此外,缓存层的存在也大幅降低云盘IO抖动对数据库运行的影响,提升稳定性。
3、AliSQL在DDL场景的优化
DDL(Data Definition Language)是MySQL中最频繁的“变更”操作之一。早期版本存在锁表、性能抖动、执行时间长等问题,导致用户不敢随意进行变更操作。但随着技术的发展,MySQL引入了Inplace DDL(5.6版本开始)和Instant DDL(8.0版本开始),大大提升了DDL操作的效率和稳定性。
在社区 MySQL 各版本对 DDL 改进的基础之上,AliSQL 团队对 DDL 做了更进一步的优化,让 DDL 操作更快、更稳、更安全。
1. 性能优化
▶︎ Instant DDL 增强:AliSQL在社区MySQL 8.0版Instant操作(支持添加字段、删除字段和修改表名等)基础上,扩展了字段类型修改等能力。例如将INT类型改为BIGINT时不存在数据不兼容问题,引擎层将两者视为同类型数据来处理,仅需修改数据字典元数据并维护版本,即可实现秒级列修改。同时AliSQL 5.7完整同步了社区MySQL 8.0的Instant add/drop column能力,使该版本也具备部分Instant DDL特性,显著提升DDL执行效率与稳定性。
▶︎ IO 和 排序优化:AliSQL优化了DDL内存管理策略。在B+tree构建过程中,优化了排序逻辑,采用更高效的排序算法替代社区版归并排序。同时,AliSQL对Inplace DDL的数据扫描、校验及刷脏流程进行深度优化,彻底解决了社区MySQL并行DDL引发的性能问题。经实测验证,AliSQL Inplace DDL执行时间较社区版缩短至63%。
▶︎ 并行构建 B+tree:社区MySQL的并行DDL本质为索引并行创建,但涉及表重建的主键操作仍保持单线程扫描插入。AliSQL在社区框架基础上重构主键数据扫描与插入逻辑,实现该流程的并行化处理。通过将二级索引并行与主键构建并行相结合,显著提升B+tree构建速度,进而提高整体DDL效率。
2. 稳定性优化
▶︎ Buffer Pool 管理优化:在业务高峰期,1个小表的结构变更就可能引起性能抖动。AliSQL开发了Faster DDL功能,优化了Buffer Pool管理策略,显著降低锁争用,缩短高峰时段DDL耗时,有效消除稳定性风险。
▶︎ 大文件异步删除:社区MySQL的DROP TABLE和TRUNCATE TABLE操作中,InnoDB数据文件会直接从文件系统中删除;这会导致POSIX文件系统出现严重的稳定性问题。AliSQL的大文件清理功能会通过后台线程实现异步清理;删除文件时将文件重命名为临时文件后由清理线程异步处理,减少文件系统抖动,有效规避系统风险。
▶︎ AHI 清理优化:社区MySQL的DROP TABLE/INDEX 和 TRUNCATE TABLE 操作中,删除自适应哈希索引(AHI)的操作耗时较高。在大文件或高缓存池配置场景下,处理 AHI 的耗时会急剧增加;同时,清理 AHI过程中的全局锁会导致DDL阻塞。AliSQL 通过优化AHI 的删除时机和加锁策略,将表删除对系统的影响降至最低。
▶︎ 非阻塞 DDL:执行DDL时若存在未提交事务或长查询,社区MySQL的MDL-X/SNW锁的高优先级会阻塞目标表所有访问,导致连接堆积甚至系统崩溃。AliSQL提供非阻塞DDL的功能,在等待MDL-X/SNW锁期间仍允许目标表访问,避免业务中断并保障系统稳定。
3. 安全性
▶︎ Recycle Bin:社区版MySQL的DDL操作不可回滚,误操作(如DROP/TRUNCATE)易引发数据丢失。AliSQL设计了回收站功能,通过将被删除表临时保留,用户可在预设时间内恢复,有效降低数据丢失风险。
4、AliSQL在Binlog模块的优化
Binlog是MySQL生态中非常重要的组件,AliSQL从性能,稳定性,复制延迟几个维度对binlog进行了优化。
1. 性能优化
▶︎ Binlog 并行写模式:社区MySQL采用串行Binlog写入,高并发下存在较大性能瓶颈。AliSQL通过Binlog Buffer机制实现多线程并发写入,利用Writer和Syncer后台线程分别处理缓冲写入与持久化;前台事务线程写Binlog时,可并发写入Binlog Buffer中并等待写入完成即可。该优化使MySQL高并发写性能提升超40%。
▶︎ Binlog in Redo:社区MySQL通过Binlog Group Commit合并多事务的Binlog和Redo log IO以优化提交性能。AliSQL在此基础上引入Binlog in Redo,将单事务的Binlog与Redo IO合并,进一步提升性能。提交阶段,Binlog直接写入Redo Log并只执行一次Sync Redo操作。宕机恢复时,AliSQL会从Redo Log恢复出Binlog内容确保数据不丢失。该优化使低并发的写性能提升超1倍,高并发的写性能提升超40%。
2. 稳定性
▶︎ 大事务写binlog优化:社区MySQL将事务生成的Binlog Events暂存在Binlog Cache;事务提交时,从Binlog Cache中读取文件,这对大事务的读取来说耗时较长,并且过程中其他事务无法写入Binlog,从而导致实例暂时不可写。AliSQL改造了Binlog Cache的临时文件,使其可以在提交阶段直接rename成binlog文件,该优化彻底消除大事务提交的性能抖动,避免了实例长时间不可写的问题,并已合入MariaDB 10.8版本。
3. 复制延迟
▶︎ Writeset 优化:社区MySQL 5.7通过Writeset实现行级并行复制,虽提升并发度却因前缀索引、外键及DDL支持不足易引发延迟或中断。AliSQL针对性优化,包括:修复前缀索引Bug,增强外键/DDL冲突检测,彻底消除带前缀索引表、外键表及高频小表DDL场景的复制延迟。▶︎ Binlog 实时复制优化:社区MySQL的Binlog复制中,大事务和大表DDL需主库提交后备库才执行,导致延迟与事务执行时长同步。AliSQL通过实时复制使主备库并行执行大事务和DDL,从根源上解决此类场景的复制延迟问题。
5、AliSQL基于DuckDB在HTAP场景的解决方案
AliSQL集成DuckDB作为分析型存储引擎,依托DuckDB列式存储与向量化计算能力实现高效分析查询,为用户提供高效分析查询能力。
在实现过程中,AliSQL对DuckDB语法解析器和函数模块进行深度改造,实现SQL语法、函数、数据类型、DDL及事务与MySQL的高度兼容。DuckDB引擎实例作为独立的只读分析节点,与主库通过Binlog同步数据,新增节点时自动将数据表转换为DuckDB引擎。用户无需对现有的业务进行改造,可以像使用和访问 MySQL 一样的方式来访问只读分析节点;同时,由于 AliSQL 将 AP 的核心能力都集成在数据库内核中,因此也无需引入数据同步工具,减少了数据同步链路的复杂性、降低数据出错和同步中断的可能性。
依托 DuckDB 的列式存储和高压缩比技术,在TPC-H sf100测试中,该方案加速比达到200+倍,而磁盘空间占用仅为20%。
6、结语
从MySQL开源内核到AliSQL的深度定制,阿里云瑶池数据库始终以"用户价值"为驱动。AliSQL作为基于MySQL深度优化的分支,从性能、稳定性、安全多个方面进行深度优化和定制;同时AliSQL积极回馈社区,推动MySQL生态发展。
未来,阿里云瑶池数据库将持续深耕数据库内核技术,为用户提供更加高效、稳定、安全的数据库体验,让云数据库像水和电一样触手可及。
*下表为阿里云瑶池数据库团队给社区提交的部分Issue截图