日志文件组的过程

  • redo log  记录到日志文件组时,write pos  位置就会后移更新。
  • MySQL 加载日志文件组恢复数据时,会清空加载过的  redo log  记录,并把  checkpoint  后移更新。
  • 当  write pos  追上  checkpoint  时,表示日志文件组满了,不能添加新纪录,MySQL 必须停下来将数据修改应用到数据文件中。

检查点机制

  1. 数据库正常关闭时,即  innodb_fast_shutdown=0  时需要执行  sharp checkpoint
  2. redo log  发生切换时或者  redo log  快满的时候进行  fuzzy checkpoint
  3. master thread 每隔  1 秒  或  10 秒  定期进行  fuzzy checkpoint
  4. innodb 保证有足够多的空闲 page,如果发现不足,需要移除 lru list 末尾的 page,如果这些 page 是脏页,那么也需要  fuzzy checkpoint.
  5. innodb buffer pool  中脏页比超过  innodb_max_dirty_pages_pct  时也会触发  fuzzy checkpoint

Checkpoint 发生的时间、条件及脏页的选择等都非常复杂。而 Checkpoint 所做的事情无外乎是将缓冲池中的脏页刷回到磁盘,不同之处在于每次刷新多少页到磁盘,每次从哪里取脏页,以及什么时间触发 Checkpoint。