InnoDB 存储引擎架构
MySQL 是世界上最流行的开源数据库,而 InnoDB 是 MySQL 的默认存储引擎。理解 InnoDB 的架构,是理解 MySQL 性能的关键。
InnoDB 解决了什么问题?在保证 ACID 的前提下,提供高性能的事务处理。
InnoDB 整体架构
Buffer Pool
Buffer Pool 是 InnoDB 的内存缓存池,缓存磁盘上的数据页(Page)。
Buffer Pool 结构
LRU 淘汰策略
Buffer Pool 使用改进的 LRU 算法,避免全表扫描污染缓存:
Page 结构
InnoDB 的数据页默认 16KB:
Redo Log
Redo Log 记录对页的物理修改,用于崩溃恢复。
Redo Log 工作原理
配置建议
Undo Log
Undo Log 记录行的旧值,用于事务回滚和 MVCC。
Undo Log 结构
MVCC 读取
Change Buffer
Change Buffer 缓存对二级索引的修改,减少随机 I/O。
为什么要缓存索引修改
Change Buffer 工作原理
配置
Doublewrite Buffer
Doublewrite Buffer 解决部分页写入(Partial Page Write)问题。
问题场景
解决方案
自适应哈希索引
InnoDB 自动监控表访问,为热点数据构建哈希索引:
主键索引与辅助索引
监控与调优
性能建议:Buffer Pool 应该足够大,能容纳热点数据;Redo Log 应该足够大,避免频繁切换;独立表空间比共享表空间更灵活。选择合适的配置,是 InnoDB 性能调优的基础。