MySQL OCP888题解040-重做日志和脏页刷新

1、原题

1.1、英文原题

Recently, users on mostly-write MySQL database have been complaining of slowdowns or stalls in their applications.
Which option is most likely to have a positive effect on the server’s health and performance?
A、Lower innodb_max_dirty_pages_pct to flush more after.
B、Move redo logs to /dev/shm to improve their speed.
C、Increase the size of redo logs.
D、Reduce the size of redo logs to improve storage efficiency.

1.2、中文翻译

最近,一个以写为主的MySQL数据库的用户一直抱怨他们的应用程序运行缓慢或停滞。哪个选项最可能对服务器的运行状况和性能产生积极影响?
A、 减小innodb_max_dirty_pages_pct的值,刷新频次更高。
B、 将重做日志移动到/dev/shm以提高其速度。
C、 增加重做日志的大小。
D、 减少重做日志的大小以提高存储效率。

1.3、答案

A

2、题目解析

2.1、题干解析

本题考察的是缓冲池的刷新。

2.2、选项解析

不太清楚原因,我本来是想选C的,即增加重做日志大小,避免经常重做日志满了所以要刷新。只能把相关知识点写下来。

3、知识点

3.1、知识点1:缓冲池的刷新

  • 脏页是指那些已经被修改但还没有写入磁盘上的数据文件的页面。刷新是指将内存中的脏数据写入磁盘。
  • 在MySQL 5.7中,缓冲池的刷新是由页面清洁线程执行的。页面清洁器线程的数量由innodb_page_cleaners变量控制,其默认值为4。 然而,如果页面清洁器线程的数量超过缓冲池实例的数量,innodb_page_cleaners会自动设置为与innodb_buffer_pool_instances相同的值。
  • innodb_max_dirty_pages_pct_lwm变量:当脏页的百分比达到innodb_max_dirty_pages_pct_lwm变量所定义的低水位值时,缓冲池的双薪就开始了。默认的低水位值是0,这样就禁用了这种早期冲刷行为。innodb_max_dirty_pages_pct_lwm阈值的目的是控制缓冲池中脏页的百分比,防止脏页的数量达到innodb_max_dirty_pages_pct变量定义的阈值,这时刷新就会导致卡顿。
  • innodb_max_dirty_pages_pct变量:如果缓冲池中的脏页百分比达到innodb_max_dirty_pages_pct的阈值,InnoDB会主动地刷新缓冲池的页面,innodb_max_dirty_pages_pct变量的默认值为75。
  • 尖锐的检查点,通常与产生大量重做日志的写密集型工作负载有关,会导致吞吐量的突然变化。当InnoDB想要重用一个日志文件的一部分时,就会发生一个尖锐的检查点。在这样做之前,该部分日志文件中所有带有重做日志的脏页必须被刷新。在这种情况下,即使没有达到innodb_max_dirty_pages_pct阈值,也会发生刷新和尖锐的检查点,导致卡顿。

官方参考文档

3.2、知识点2:innodb_max_dirty_pages_pct系统变量

innodb_max_dirty_pages_pct参数可以动态调整,最小值为0, 最大值为99.99,默认值为 75。这个百分比是最大脏页的百分数,当系统中脏页所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。降低innodb_max_dirty_pages_pct会增加写操作。

除了脏页百分比达到阈值innodb_max_dirty_pages_pct触发刷脏页以外,还有很多条件,也会触发刷脏页,主要包括:

  • REDO日志快满的时候。
  • 为了保证MySQL中的空闲页面的数量,会从LRU 链表尾部淘汰一部分页面作为空闲页。如果对应的页面是脏页的话,就需要先将页面刷到磁盘。
  • MySQL实例正常关闭时候。

4、总结

  1. 脏页是指那些已经被修改但还没有写入磁盘上的数据文件的页面。刷新是指将内存中的脏数据写入磁盘。
  2. 更新的数据会先保存在InnoDB的缓冲池,缓冲池会在如下情况产生刷新。
    • 脏页所占百分比超过innodb_max_dirty_pages_pct参数;
    • 脏页所占百分比超过innodb_max_dirty_pages_pct_low参数,且innodb_max_dirty_pages_pct_low参数不为0;
    • REDO日志快满的时候;
    • 为了保证MySQL中的空闲页面的数量,会从LRU 链表尾部淘汰一部分页面作为空闲页。如果对应的页面是脏页的话,就需要先将页面刷到磁盘;
    • MySQL实例正常关闭时候。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值