图解MySQL【日志】——BufferPool
- 开源代码
- 2025-08-26 10:39:02

Buffer Pool 什么是 Buffer Pool?
Buffer Pool 是数据库管理系统(DBMS)中的一块 Cache(内存区域),用来缓存从磁盘中读取到的 Data Pages(数据页)。Data Pages 通常是表中的数据行与索引数据,通过缓存 Data Pages,Buffer Pool 可以大大减少对磁盘的访问,提高 DB 的性能。
为什么需要 Buffer Pool? 1. 磁盘 I/O 性能瓶颈 数据库通常将数据存储在磁盘中,而磁盘 I/O 相对于内存访问速度会慢很多,尤其是大型数据库,磁盘 I/O 成为性能的主要瓶颈。Buffer Pool 的出现,完美地解决了这一问题,它通过缓存从磁盘中读取到的数据,在内存中保存一个副本,从而减少对磁盘的访问。
2. 减少磁盘读取,提高性能 读数据: 如果数据存在于 Buffer Pool 中,客户端直接读取。不在,去磁盘中读取,并加载到 Buffer Pool。 修改数据: 该数据在 Buffer Pool 中,直接修改 Buffer Pool 中数据所在的页,然后将其设置为脏页脏页(Dirty Pages):该页的内存数据和磁盘上的不一致了。后台写入(Flush):为了减少磁盘 I/O,不会立即将脏页写入磁盘,后续由后台线程择机异步将脏页写入磁盘。
Buffer Pool 缓存什么? 1. InnoDB 分页 InnoDB 会把存储的数据分为若干个【页】,以页(默认 16KB)作为磁盘交互的基本单位,因此 Buffer Pool 同样需要按【页】来划分。
2. Buffer Pool 初始化内存 MySQL 启动时,InnoDB 会为 Buffer Pool 申请一片连续的内存空间,然后按照默认的 16KB 大小划分出一个一个的页,即缓存页。
3. MySQL 为什么启动时虚拟内存很大,物理内存却很小? 这是因为这些被分配的虚拟内存被访问时,OS 才会触发中断缺页机制,申请物理内存,接着将虚拟内存和物理地址建立映射关系。
4. Buffer Pool 中的各种页 数据页:包含用户表中的行数据。索引页:存储主键索引和辅助索引结构。undo 页:支持事务回滚的日志记录。redo log 页:保证事务持久性的日志页。插入缓冲:加速非主键索引的插入操作。元数据:缓存数据库的元数据信息。锁页:缓存锁信息,避免重复加锁。
5. 查询一条记录只缓冲一条记录吗? 懂得了 InnoDB 的分页机制后,我们就会知道磁盘交互的基本单位是页,查询一条记录时,会将整个页的数据加载到 Buffer Pool 中,再通过页中的【页目录】定位到需要查询的具体记录。
图解MySQL【日志】——BufferPool由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“图解MySQL【日志】——BufferPool”