第一种是“redo log 写满了,要 flush 脏页”,这种情况是 InnoDB 要尽量避免的。
因为出现这种情况的时候,整个系统就不能再接受更新了,所有的更新都必须堵住。
如果你从监控上看,这时候更新数会跌为 0。
第二种是“内存不够用了,要先将脏页写到磁盘”,这种情况其实是常态。InnoDB 用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:
第一种是,还没有使用的;
第二种是,使用了并且是干净页;
第三种是,使用了并且是脏页。
涉及两个参数:
io容量(默认是机械硬盘的值,如果是ssd要加大)
show variables 'innodb_io_capacity';
和
刷脏页连坐(默认是机械硬盘的设置为1,如果是ssd,最后设置为0)
show variables like 'innodb_flush_neighbors';