Mysql实战45讲学习笔记-为什么我的MySQL会“抖”一下

首先引入两个概念
脏页:当内存数据页和磁盘数据页不一致时,内存页叫脏页。
干净页:一致则为干净页。

平时一些执行很快的更新操作,其实就是在写内存和日志。出现抖动(突然某个简单的sql执行的很慢)可能就是在执行flush刷脏页(更新磁盘中的旧数据)。

刷脏页的四种情况
1、redo log写满了,此时会暂停所有更新操作,推进cp(checkpoint点),重新腾出空间。
在这里插入图片描述2、内存满了。会淘汰一些数据页,若淘汰的是脏页,需要先flush掉脏页。
3、当mysql服务空闲时,会自动进行脏页的flush。
4、关闭mysql时,会对旧数据进行更新。

第三四种情况属于空闲情况,一般不会对性能产生影响。所以主要探讨前两种情况。

针对第一种情况,会暂停所有的更新操作,这种情况是需要尽量避免的。针对第二种情况,某个查询如果发现内存中找不到,并且内存满了,便会淘汰一些内存页,如果内存页是脏页,还需要淘汰之前进行flush。如果一个查询需要淘汰的脏页比较多,也会影响查询性能。

针对以上两种情况,innodb有对应的脏页控制策略来避免上述情况。
这就要用到 innodb_io_capacity 这个参数了,它会告诉 InnoDB 你的磁盘能力,也就是全力刷盘的能力。这个值建议设置成磁盘的IOPS,IOPS的测试命令为:

 fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest 

但是肯定不可能mysql一直在全力刷磁盘吧,总需要提供读写等服务吧。所以我们需要设置一个合理的百分比,让引擎分配合理的资源用来刷盘。

那怎么计算这个比例呢 ?默认是参照两个参数
1、innodb_max_dirty_pages_pc(脏页比例上限),innodb会根据
当前的脏页比例计算出一个值假设为F1,再根据当前日志序号计算出另一个值F2,两个值的较大值就是这个比例。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不认识CBW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值