
什么是刷脏
- 将内存中数据页保存至磁盘
- 同时,删除与此页相关的redo log,推进check point
为什么要刷脏
- 内存页中的脏页太多,内存不足
- redo log文件写满,需要推进check point
- 系统空闲,提前刷脏,预防上述情况
- MySQL关闭前,保存数据
-
如何避免被迫刷脏
正确告诉InnoDB,服务器的硬盘性能
- 配置合理的脏页比例上限
- 控制“顺便刷脏”策略
服务器IO配置
- 配置项:innodb_io_capacity
- 用来告知服务器的硬盘性能
常见IOPS:
配置项:innodb_max_dirty_pages_pct
- 当脏页比例接近此值,会加速刷脏页
- 建议保持默认值75
控制“顺便刷脏”策略
- 配置项:innodb_flush_neighbors
- 传统的磁盘连续写性能最好,尽量刷连续的页
- SSD建议设为0(8.0已经默认0)
总结
- 刷脏可能会导致MySQL卡住
- 通过告知服务器IO性能,可以控制合理刷脏IO
- 合理的脏页比例上限
