InnoDB引擎在处理更新语句时,会先写入redo log(重做日志),然后更新内存,最后将内存中的数据写入磁盘。在这个过程中,内存数据页和磁盘数据页可能会不一致,这种不一致的内存页被称为“脏页”。
脏页刷写flash的时机有四种:redo log写满、系统内存不足、系统空闲时以及数据库正常关闭时。当redo log写满时,系统无法接受更新,所有更新操作都会被阻塞。
调优方法:正确设置innodb_io_capacity
参数的重要性,建议将其设置为磁盘的IOPS(每秒输入/输出操作次数),以确保InnoDB能够根据实际的磁盘能力来控制刷脏页的速度。
# 获取磁盘IOPS
fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest