day-12-为什么我的MySQL会“抖”一下?
- 脏页:内存数据页跟磁盘数据页内容不一致。
- 干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容一致。
一、什么情况会引发数据库的 flush 过程
- InnoDB 的 redo log 写满了。
- 系统内存不足。
- MySQL 认为系统“空闲”的时候。
- MySQL 正常关闭的情况。
InnoDB 的策略是尽量使用内存,因此对于一个长时间运行的库来说,未被使用的页面很少。
影响性能的两种情况:
- 一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长;
- 日志写满,更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的。
二、InnoDB 刷脏页的控制策略
合理地设置 innodb_io_capacity 的值,并且平时要多关注脏页比例,不要让它经常接近 75%。
三、小结
利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能。
脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 张晓风的博客!
评论