redo log⼤家都知道,也就是我们对数据库操作的⽇志,他是在内存中的,每次操作⼀旦写了redo log就
会⽴⻢返回结果,但是这个redo log总会找个时间去更新到磁盘,这个操作就是flush。
在更新之前,当内存数据⻚跟磁盘数据⻚内容不⼀致的时候,我们称这个内存⻚为“脏⻚”。
内存数据写⼊到磁盘后,内存和磁盘上的数据⻚的内容就⼀致了,称为“⼲净⻚“。
MySQL正常关闭,这时候,MySQL会把内存的脏⻚都flush到磁盘上,这样下次MySQL启动的时
候,就可以直接从磁盘上读数据,启动速度会很快
Innodb刷脏⻚控制策略,我们每个电脑主机的io能⼒是不⼀样的,你要正确地告诉InnoDB所在主机的IO
能⼒,这样InnoDB才能知道需要全⼒刷脏⻚的时候,可以刷多快。
这就要⽤到innodb_io_capacity这个参数了,它会告诉InnoDB你的磁盘能⼒,这个值建议设置成磁盘的
IOPS,磁盘的IOPS可以通过fio这个⼯具来测试。
正确地设置innodb_io_capacity参数,可以有效的解决这个问题。
这中间有个有意思的点,刷脏⻚的时候,旁边如果也是脏⻚,会⼀起刷掉的,并且如果周围还有脏⻚,
这个连带责任制会⼀直蔓延,这种情况其实在机械硬盘时代⽐较好,⼀次IO就解决了所有问题
但是现在都是固态硬盘了,innodb_flush_neighbors=0这个参数可以不产⽣连带制,在MySQL 8.0中,
innodb_flush_neighbors参数的默认值已经是0了
参考:《MySQL实战》、《⾼性能MySQL》、《丁奇MySQL47讲》