mysql-5.7 innodb_buffer_pool刷新机制详解

一、innodb的脏页刷新机制说明

  1、当innodb中的脏页比例超过innodb_max_dirty_pages_pct_lwm的值时,这个时候innodb就会开始刷新脏页到磁盘。

  2、当innodb中的脏页比例超过innodb_max_dirty_pages_pct_lwm的值,而且还超过innodb_max_dirty_pages_pct

       innodb就会进入勤快刷新模式(agressively flush)这个模式下innodb会把脏页更快的刷新到磁盘。

  3、还有一种情况叫做sharp checkpoint ,当innodb要重用它之前的redo文件时,就会把innodb_buffer_pool中所有与这

       个文件有关的页面都要刷新到磁盘;这样做就有可能引起磁盘的IO风暴了,轻者影响性能,重者影响可用性。

 

二、对上面机制的再次说明:

  1、脏页刷新是innodb后台执行的确定性工作,默认情况下每秒都会有(check point);innodb的脏页刷新就有点像现实生

      活中的呼吸一样,通常是以固定的频率进行的,一.1 就好比是安静的情况下,一.2就好比是运动的情况下,一.3就好比

          你在水中闭气一分中后刚探出头一样。

 

三、对于控制刷新机制的各个参数的说明:

  1、innodb_max_dirty_pages_pct默认值为75,也就是说当脏页比例超过75%时才会进入勤快刷新模式。

  2、innodb_max_dirty_pages_pct_lwm默认值是0,0对于innodb_max_dirty_pages_pct_lwm来说是一个特殊值,它表示

      不启用这个功能;由于没有启用这个功能,也就是说innodb_buffer_pool中的脏页比例会操持在75%左右。

 

四、一.3的情况MySQL如何解决:

  1、对于第三种情况MySQL的解决思路是这样的,IO风暴是由redo 文件重用时要刷新整个redo文件对应的innodb_buffer_pool页面,

  也就是说风暴发生的时刻是重用redo日志是发生的;针对这一问题Mysql的解决方案是根据redo的生成速率,实时的刷新

  innodb_buffer_pool中的页面到磁盘,这样在redo日志文件重用时就不要刷新过多的页面,也就没有IO风暴了。由于页面的刷新

  是根据redo的生成速率自动调整的,所以这个方案的名字叫innodb_adaptive_flushing

  2、由于innodb_adaptive_flushing 会自动的刷新,它基本上把一.1中的情况也给解决了,所以默认情况下mysql会把

  innodb_max_dirty_pages_pct_lwm=0,0在这里是一个特殊值,在这里表示关闭的意思。

 

----

学习交流

 

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值