《MySQL实战45讲》12 | 为什么我的MySQL会“抖”一下?

“抖”的含义

之前执行很快的SQL语句,偶尔会出现执行很慢,且很难复现,持续的时间很短。感觉就是数据库“抖”了一下。


“抖”的原因

名词解释

  • 脏页:内存数据页和磁盘数据页内容不一致时,称内存页为“脏页”;
  • 干净页:内存数据页和磁盘数据页内容一致时,称内存页为“干净页”;
  • 刷脏页(flush):内存的数据页写到磁盘的过程。

触发刷脏页的情况

  • redo log写满了,需要触发flush脏页,系统将不能接受更新操作,要尽量避免。
  • 内存不足
  • MySQL系统空闲(无性能问题)
  • MySQL正常关闭(无性能问题)

内存不足分析
InnoDB通过缓冲池(buffer pool)管理内存,缓冲池中内存页的三种状态:

  • 未被使用;
  • 已被使用,且为干净页;
  • 已被使用,且为脏页。

当读入的数据页不在内存,且内存页已被使用完,此时,就需要淘汰掉最久未被使用的内存页,若要淘汰的为干净页,则直接释放,若为脏页,则需先flush脏页,变为干净页后释放。
故刷脏页是一个很常规的事情,但出现如下情况时,会明显的影响到性能:

  • 一个查询需要淘汰的脏页个数太多,导致查询响应变长;
  • 日志写满,更新全部堵住,对于敏感业务是很难接受到的。

故InnoDB通过控制策略来控制刷脏页的比例,规避如上情况。

InnoDB刷脏页的控制策略
通过innodb_io_capacity 参数正确地设置 InnoDB所在主机的IO能力,建议设置为磁盘的IOPS,IOPS可通过fio工具测试得到。
控制刷盘速度参考的因素:脏页比例;redo log写盘速度。根据这两个因素分别计算出两个值M、N,取其中较大的值记为R。再按照 innodb_io_capacity 定义的能力乘以 R% 来控制刷脏页的速度。
在这里插入图片描述


本文为《MySQL实战45讲》学习笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值