RTO(Recovery Time Objective)指从故障发生到系统恢复可用状态的时间,是衡量数据库系统高可用性的核心指标。AliSQL基于社区MySQL,通过深度优化实例崩溃恢复(Crash-Recovery)全流程,加速实例启动的过程,缩短RTO时间,保证实例快速恢复服务。
优化项 优化对象或流程 优化效果 表空间检查 实例正常启动时间缩短73%,崩溃恢复时间缩短95%以上,启动阶段内存占用减少81%以上。 Buffer Pool并行初始化 Buffer Pool初始化时间缩短80%以上。 Redo Log的扫描与应用 Redo Log应用时间缩短80%以上。 Undo Log Record结构 100 万行记录大事务恢复时间约等于0秒,可忽略不计。 未决事务的回滚 100 万行记录大事务回滚时间约等于0秒,可忽略不计。 扫描定位损坏数据 10 GB General Log表恢复时间约等于0秒,可忽略不计。 表空间检查是崩溃恢复的基础,但海量表(如100万张表)会导致实例启动和崩溃恢复过程缓慢且占用大量内存。AliSQL针对此场景优化了文件扫描、数据字典读取、表对象构建等核心流程,显著缩短海量表场景下表扫描的耗时。优化效果如下: 场景 社区MySQL(优化前) AliSQL(优化后) 提升幅度 正常启动时间 90.7秒 24.1秒 缩短73%以上 崩溃恢复时间 521.7秒 25秒 缩短95%以上 启动阶段内存占用 高 减少81%以上 显著优化 内核版本:RDS MySQL 8.0内核小版本大于等于20240731。 关键参数: Buffer Pool是InnoDB核心内存结构,其初始化过程需分配内存并构建管理结构。虽然社区版MySQL已在实例级粒度上实现Buffer Pool并行初始化,但锁结构与全局统计信息更新仍存在并发瓶颈。AliSQL优化了Buffer Pool并行初始化流程,消除了并行初始化过程中的瓶颈点,显著缩短大内存实例的Buffer Pool初始化耗时。优化效果如下: 场景 社区MySQL(优化前) AliSQL(优化后) 提升幅度 512 GB Buffer Pool初始化时间 19.7秒 3.8秒 缩短80%以上 内核版本: RDS MySQL 8.0内核小版本大于等于20220530。 RDS MySQL 5.7内核小版本大于等于20230531。 关键参数: Redo Log作为MySQL数据库中的WAL日志,用于保证数据一致性。在崩溃恢复中,Redo Log的扫描与应用是关键步骤。社区MySQL仅支持单线程扫描和串行化应用,导致大量Redo Log(如4 GB)的恢复耗时可达数分钟。AliSQL通过引入流水线机制,实现Redo Log的扫描与应用并行化,显著提升恢复速度。优化效果如下: 场景 社区MySQL(优化前) AliSQL(优化后) 提升幅度 4 GB Active Redo Log应用时间 118.7秒 22.6秒 缩短80%以上 应用速度 基准速度 提升500%以上 显著提升 内核版本:RDS MySQL 8.0内核小版本大于等于20241231。 关键参数:innodb_parallel_redo_threads(默认关闭)。需手动设置 在崩溃恢复中,Redo Log应用结束之后,MySQL需通过Undo Log恢复活跃事务的表锁。社区MySQL需逐行扫描所有Undo Log Record获取事务操作的表信息,导致大事务(如百万级记录)的恢复耗时显著提升。AliSQL通过扩展Undo Log Record结构,实现Undo Log的快速定位与扫描,显著减少事务恢复的时间。优化效果如下: 场景 社区MySQL(优化前) AliSQL(优化后) 提升幅度 100 万行记录大事务恢复时间 6.8秒 约等于0秒,可忽略不计 完全优化 内核版本: RDS MySQL 8.0内核小版本大于等于20230630。 RDS MySQL 5.7内核小版本大于等于20230831。 关键参数:innodb_trx_resurrect_table_lock_accelerate(默认关闭)。需手动设置 MySQL通过内部XA事务实现Binlog与InnoDB的一致性。具体流程为:事务提交时先执行InnoDB Prepare并保持Prepared状态,再写入Binlog,最后提交。崩溃恢复时,未决事务(Prepared状态)的提交或回滚需由Binlog决定。社区MySQL的未决事务回滚是同步操作,导致大事务(如百万级记录)的恢复耗时显著提升。AliSQL将未决事务的回滚改为异步处理,不阻塞实例启动,使实例快速恢复服务。优化效果如下: 场景 社区MySQL(优化前) AliSQL(优化后) 提升幅度 100 万行记录大事务回滚时间 100秒 约等于0秒,可忽略不计 完全优化 内核版本: RDS MySQL 8.0内核小版本大于等于20220530。 RDS MySQL 5.7内核小版本大于等于20230531。 关键参数: MySQL的General Log在TABLE模式下以CSV表形式存储用户操作记录。若崩溃恢复时发现该表损坏,社区MySQL需通过全表扫描定位损坏数据并重建,导致大数据量(如10 GB)的恢复耗时显著提升。AliSQL通过逆向扫描和截断文件等技术,快速修复日志表损坏,大幅缩短实例启动延迟,加速实例恢复。优化效果如下: 场景 社区MySQL(优化前) AliSQL(优化后) 提升幅度 10 GB General Log表恢复时间 270秒 约等于0秒,可忽略不计 完全优化 内核版本: RDS MySQL 8.0内核小版本大于等于20241130。 RDS MySQL 5.7内核小版本大于等于20241130。 关键参数: 除了上述优化外,AliSQL还对Double Write的数据校验过程进行了优化,建议升级内核小版本到最新小版本。优化内容概述
海量表启动优化
开启方式
loose_fetch_raw_tablespace_at_startup(默认开启)。参数开启时,实例启动仅加载必要元数据,延迟加载冗余信息,减少内存占用与启动时间。Buffer Pool初始化加速
开启方式
innodb_buffer_pool_init_optimize(默认开启)。参数开启时,系统自动优化Buffer Pool并行初始化流程,消除锁与同步瓶颈。Redo Log并行应用
开启方式
innodb_parallel_redo_threads参数(默认值为1)大于2(如innodb_parallel_redo_threads=4)。该参数可指定Redo Log并行应用的线程数,提升Redo Log扫描和应用的速度。Transaction快速恢复
开启方式
innodb_trx_resurrect_table_lock_accelerate参数(默认值为OFF)为ON。参数开启时,启用Undo Log快速扫描机制,加速大事务恢复。Transaction异步回滚
开启方式
async_binlog_recovery(默认开启)。参数开启时,启用未决事务异步回滚机制,加速实例启动。General Log Recovery优化
开启方式
reverse_repair_general_log_on_boot(默认开启)。参数开启时,启用逆向扫描与截断修复机制,加速General Log表恢复。其他优化