Mysql为了避免每次SQL执行都要去访问磁盘,设计出了BufferPool。数据都是通过BufferPool进行增删改查的。比如执行数据更新操作时,有如下几步:

  1. Mysql会以page为单位从磁盘中加载数据到BufferPool中(数据存在就不用访问磁盘了)
  2. 需要更新的数据写入到undo日志(用于事务回滚)中
  3. 更新BufferPool中的数据
  4. 写redo日志(防止因异常原因导致BufferPool数据丢失时,恢复数据使用)
  5. binlog日志(多用于恢复数据库磁盘数据)
  6. 向redo日志中写入commit标记
  7. 异步将BufferPool中变更的数据刷盘

如下图示:
BufferPool

  • 为什么MySQL使用BufferPool+Redo日志来处理SQL呢?
    因为基于BufferPool内存操作,效率是很高的,其次写Redo日志采用了顺序读写,相较于数据库磁盘文件的随机读写也是很高效的。