日志文件组的过程
redo log记录到日志文件组时,write pos位置就会后移更新。- MySQL 加载日志文件组恢复数据时,会清空加载过的
redo log记录,并把checkpoint后移更新。 - 当
write pos追上checkpoint时,表示日志文件组满了,不能添加新纪录,MySQL 必须停下来将数据修改应用到数据文件中。
检查点机制
- 数据库正常关闭时,即
innodb_fast_shutdown=0时需要执行sharp checkpoint redo log发生切换时或者redo log快满的时候进行fuzzy checkpoint- master thread 每隔
1 秒或10 秒定期进行fuzzy checkpoint - innodb 保证有足够多的空闲 page,如果发现不足,需要移除 lru list 末尾的 page,如果这些 page 是脏页,那么也需要
fuzzy checkpoint. - innodb
buffer pool中脏页比超过innodb_max_dirty_pages_pct时也会触发fuzzy checkpoint
Checkpoint 发生的时间、条件及脏页的选择等都非常复杂。而 Checkpoint 所做的事情无外乎是将缓冲池中的脏页刷回到磁盘,不同之处在于每次刷新多少页到磁盘,每次从哪里取脏页,以及什么时间触发 Checkpoint。