图解MySQL【日志】——Buffer Pool

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 中,再通过页中的【页目录】定位到需要查询的具体记录。

相关推荐
m0_7369270419 小时前
2025高频Java后端场景题汇总(全年汇总版)
java·开发语言·经验分享·后端·面试·职场和发展·跳槽
掘金者阿豪19 小时前
“多余的”回车:从IDE的自动换行窥见软件工程的规范与协作
后端
我系真滴菜19 小时前
SQLiteStudio基本操作教程
数据库
CodeAmaz19 小时前
自定义限流方案(基于 Redis + 注解)
java·redis·限流·aop·自定义注解
q***498619 小时前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
q***180619 小时前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
Felix_XXXXL19 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
韩立学长19 小时前
【开题答辩实录分享】以《基于SpringBoot在线小说阅读平台》为例进行答辩实录分享
java·spring boot·后端
悟能不能悟19 小时前
jsp怎么拿到url参数
java·前端·javascript
KWTXX19 小时前
组合逻辑和时序逻辑的区别
java·开发语言·人工智能