• 脏页:内存数据页跟磁盘数据页内容不一致。
  • 干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容一致。

一、什么情况会引发数据库的 flush 过程

  • InnoDB 的 redo log 写满了。
  • 系统内存不足。
  • MySQL 认为系统“空闲”的时候。
  • MySQL 正常关闭的情况。

InnoDB 的策略是尽量使用内存,因此对于一个长时间运行的库来说,未被使用的页面很少。

影响性能的两种情况:

  • 一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长;
  • 日志写满,更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的。

二、InnoDB 刷脏页的控制策略

合理地设置 innodb_io_capacity 的值,并且平时要多关注脏页比例,不要让它经常接近 75%。

三、小结

利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能。

脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。