MySQL Buffer Pool 机制¶
一、是什么¶
InnoDB 在内存里缓存数据页和索引页,避免每次都读磁盘。
二、为什么重要¶
磁盘 IO 是瓶颈,内存比磁盘快 10 万倍。Buffer Pool 命中率决定性能。
三、配置¶
四、管理¶
LRU 链表¶
- 最近使用的放头部。
- 淘汰尾部。
改进 LRU¶
InnoDB 的 LRU 分两部分: - young(5/8):热点数据。 - old(3/8):新读入的数据。
避免全表扫描把热点挤掉。
五、预读¶
- 线性预读:读到一个 extent 的大部分,预读下一个 extent。
- 随机预读:磁盘上相邻的页。
六、刷脏页¶
修改后先写 Buffer Pool,再异步刷磁盘。redo log 保证持久化。
七、大并发为什么要调大 Buffer Pool¶
- 数据都在内存,查询不读磁盘。
- 命中率 > 99%,性能飙升。
- 太小,频繁从磁盘读。
面试要点
Buffer Pool 是 InnoDB 性能的核心。命中率高 = 快。