14.3.3.2 Configuring the Rate of InnoDB Buffer Pool Flushing 配置 InnoDB Buffer Pool 刷新频率
InnoDB 执行某些后台任务,包括flush dirty pages(那些pages已经被修改了但是没有写入到database files)
从buffer pool.InnoDB flushes buffer pool 页如果当前脏的pages 的比例在buffer pool
超过了 innodb_max_dirty_pages_pct。 在MySQL 5.7.5,
InnoDB flushed buffer pool pages 如果 脏的pages的比例大于或等于innodb_max_dirty_pages_pct
InnoDB 使用一个算法来评估flush需要的速率,其目的是平滑的总体的性能通过确保buffer flush 活动
来保持缓冲池的干净。
flush自动调整的速率可以帮助避免突然下降的吞吐量, 当过多的buffer pool flush 限制了I/O的性能
InnoDB 使用它的log files 在一个循环方式,在重用log file的一部分之前,
InnoDB flushes 所有的dirty buffer pool pages 到磁盘,这些redo entries 是包含在log file这部分,
这一操作称为checkpoint. 如果负载是写密集的,它会产生大量的redo 信息,都被写入到log file.
如果所有的可用空间在log files 都被使用,一个checkpoint 发生,
导致一个临时的吞吐量下降。这种情况肯呢过发生 即使 innodb_max_dirty_pages_pct 没有被达到。
InnoDB 使用一个启发式算法来避免这样的情况,通过测量 缓冲池里的脏的pages的数量,
和redo生成的频率。 基于这些数据,InnoDB 决定每秒多少脏的pages 从buffer pool 刷新到磁盘
内部基准测试还表明,该算法不仅保持吞吐量随着时间的推移,也可以显著的改善整体的吞吐量