AliSQL内核特性
AliSQL 是阿里云基于 MySQL 开发的增强版本,在性能、稳定性和安全性方面做了大量优化。这些优化已在阿里云 RDS for MySQL 中默认开启。
适用场景:使用阿里云 RDS for MySQL 的业务、对事务提交性能有高要求的 OLTP 场景、需要防误删保护的生产数据库。AliSQL 的优化对用户透明,无需修改应用代码。
核心要点
阿里云AliSQL内核优化与增强功能,包括性能优化、稳定性优化、安全性增强
性能优化
Binlog In Redo
事务提交时需要先 Flush RedoLog,再 Flush Binary Log,最后释放锁。
优化方案:将 Binlog 先写在 Redo 里,只要刷一次 Redo 就能保证后续 Binlog 不会丢失,整个事务提交过程的落盘操作变成只需一次。
效果:增强事务并发性,性能提升约 25%。
多块读
MySQL 处理 IO 时基本是逐块读取,查询大表、加索引时十分浪费时间。
优化方案:读第一个块时,将后续的块也读进来(多块读)。
效果:
- AIO 关闭:115 秒 → 67 秒
- AIO 打开:115 秒 → 43 秒
高效查询缓存(Consistent Result Cache)
MySQL 8.0 剔除了查询缓存,AliSQL 在 8.0 基础上重新研发了查询缓存。
特点:
- 与事务机制结合,从缓存查出来的数据满足事务隔离级别
- 在 4C8G 机器上测试,性能提升 100%
配置建议:适当缩减 Buffer Pool 大小,空出一部分内存给查询缓存使用。
稳定性优化
快速 DDL
MySQL Buffer Pool 中,表或索引的数据混合存放在同一个 Buffer 里。DDL 时可能要扫描整个 Buffer Pool,效率很低。
优化方案:在 Buffer Pool 加入导航机制,快速定位操作对象。
效果:无快速 DDL 耗时 80.51 秒,有快速 DDL 耗时 0.34 秒。在 RDS 5.6/5.7/8.0 默认开启。
性能监控插件
show global status 查看性能数据执行成本高昂。
优化方案:
- 将性能数据收集做到内核中
- 从内核角度直接读取内存位置,数据写到文件里
- 可以做到每秒钟一个数据,无论负载情况如何
数据存储方式:
- 格式化文本文件(每个文件 100MB 自动切换,支持回溯)
- 内存表(可直接访问,便于实时分析)
BP 动态伸缩
Buffer Pool 伸缩调节时,缩小会有很大问题。
优化方案:改进 Buffer Pool 缩小时的抖动问题。
效果:原生 MySQL 抖动非常厉害,BP 动态伸缩最坏情况跌 20%,业务繁忙阶段可能没有抖动。
页面淘汰优化
内存紧张时容易引入单页淘汰,逐页淘汰效率低下。
优化方案:将淘汰一个页的概率降到最低,用同时淘汰多页代替逐页淘汰。
效果:
- 关闭范围查询场景:提升 20%
- 打开范围查询场景:提升 15-20%
安全性增强
国密(SM4)支持
增加对国密 SM4 算法的支持,满足国家对加密算法的要求与标准。
防删表保护
防止数据库表被意外删除。
保护范围:
- 数据类:Drop Table、Truncate Table、Drop Partition、Truncate Partition、Exchange Partition、Drop Tablespace
- 定义类:存储过程、视图、触发器、Binary Log
保护级别设置:
- 指定用户账号
- 要求 Super 权限
- 通过内部管控平台操作
- 要求本地登录
DDL 回收站
开启回收站功能后,删除操作不是直接删除表,而是移到回收站。
特点:
- 与 Windows 回收站概念类似
- 对回收站权限做了特别控制
- 需要有特别权限才能彻底删除
- 发生误操作误删表时,可以从回收站快速找回数据