MySQL进阶【十三】—— 深度探究 BufferPool 提升效率的原理

BufferPool是什么

  • mysql中的一块缓冲池,用来提升读写效率
  • 所有的增删改查不直接操作硬盘,都针对bufferpool进行,然后bufferpool再定时向磁盘中刷新数据
  • bufferPool中的数据是按页从磁盘中加载而来,被修改的数据页称为脏页(与磁盘数据页不同步)

BufferPool是如何工作的

流程很复杂,一图千言,直接看图
在这里插入图片描述

  • 1、从磁盘中加载数据到bufferpool,按页加载(每页4K大小)
  • 2、将数据的旧值写入到undo_log,以便后续回滚
  • 3、数据对bufferpool进行修改,修改后的数据页称为脏页
  • 4、修改数据同时写入redo_log buffer
  • 5、准备提交事务时,将redo_log刷入磁盘,并标记为prepare状态
  • 6、写入bin_log日志
  • 7、提交事务,写入redo_log,并标记为commit状态
  • 8、bufferpool的脏页数据,通过单独的IO线程,定时刷入磁盘

BufferPool是如何提升效率的

bufferpool
  • bufferpool是一个内存的缓冲池,直接针对内存操作,内存io相比于磁盘io,会有巨大幅度的性能提升(差不多1000倍),在很多服务组件上都使用缓冲池来提升性能
  • bufferpool 中的数据,通过一条io线程,在mysql闲时或者bufferpool容量已满时,向磁盘中刷新数据
同时写多份log,如何保证效率的
  • redo_log、bin_log 都有对应的buffer,先写buffer后再刷磁盘,且刷磁盘是顺序io,效率上比随机io要高的多

故障重启后如何保障数据恢复

Innodb的LRU算法

  • innodb 的LRU算法是非常巧妙的,通过将LRU连表分为新生代和老年代,比例为63:37,解决了预读失败的问题
  • 老年代又做了优化,使用一个时间窗口,当老年代的数据,停留超过默认时间窗口(1秒)后,被放入到新生代的头部
详细的文章链接 https://www.jianshu.com/p/f9ab1cb24230
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值