InnoDB Buffer Pool 机制详解(MySQL 8.0 生产级完整版)
这是 InnoDB 最核心、面试最高频、线上性能影响最大的模块,我用架构 + 流程 + 淘汰机制 + 刷盘策略 + 产线配置一次性讲透。
一、Buffer Pool 是什么
Buffer Pool(简称 BP)是 InnoDB 在内存中的一块巨大缓存区域,用来缓存:
- 数据页(16KB)
- 索引页
- 锁信息、自适应哈希索引、undo 页等
一句话作用:
把磁盘随机 IO 转为内存操作,是 MySQL 快的核心原因。
二、Buffer Pool 基本结构
1. 默认页大小
- 16KB(innodb_page_size)
所有数据都是按页读写,不会按行。
2. BP 内部组成
Buffer Pool ├─ Buffer Pool Instance(多个分区,减少并发锁竞争) │ ├─ Control Block(页描述信息) │ └─ Buffer Frame(真实 16KB 数据页) ├─ Free List(空闲页链表) ├─ Flush List(脏页链表,按 LSN 排序) ├─ LRU List(最近最少使用链表,冷热数据分离) └─ Adaptive Hash Index(自适应哈希,加速等值查询)