因为运行的不正常了,或者不稳定了,需要花费更多的资源处理别的事情,会使SQL语句的执行效率明显变慢。针对innoDB导致MySQL抖的原因,主要是InnoDB 会在后台刷脏页,而刷脏页的过程是要将内存页写入磁盘。所以,无论是你的查询语句在需要内存的时候可能要求淘汰一个脏页,还是由于刷脏页的逻辑会占用 IO 资源并可能影响到了你的更新语句,都可能是造成你从业务端感知MySQL“抖”了一下的原因。
怎么让MySQL不抖?
设置合理参数配配置,尤其是设置 好innodb_io_capacity 的值,并且平时要多关注脏页比例,不要让它经常接近 75%
啥是脏页?
当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”
啥是干净页?
内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。
脏页是咋产生的?
因为使用了WAL技术,这个技术会把数据库的随机写转化为顺序写,但副作用就是会产生脏页
啥是随机写?为啥那么耗性能?
随机写我的理解是,这次写磁盘的那个扇区和上一次没啥关系,需要重新定位位置,机械运动是很慢的即使不是机械运动重新定位写磁盘的位置也是很耗时的
啥是顺序写?
顺序写我的理解是,这次写磁盘那个扇区就在上一次的下一个位置,不需要重新定位写磁盘的位置速度当然会快一些
WAL怎么把随机写转化为顺序写的?
写redolog是顺序写的,先写redolog等合适的时候再写磁盘,间接的将随机写变成了顺序写,性能确实会提高不少。