MySQL技术内幕InnoDB存储引擎 - 检查点

InnoDB通过LSN(long sequence number) 来标记版本。
LSN 在 页,redo log,checkpoint 都存在。
可以通过 SHOW ENGINE INNODB STATUS 查看LSN信息:
--- LOG --- Log sequence number 1638196851 Log buffer assigned up to 1638196851 Log buffer completed up to 1638196851 Log written up to 1638196851 Log flushed up to 1638196851 Added dirty pages up to 1638196851 Pages flushed up to 1638196851 Last checkpoint at 1638196851 411758 log i/o's done, 0.21 log i/o's/second


1、Master Thread CheckPoint

2、FLUSH LRU LIST Checkpoint
InnoDB 需要 LRU列表中保留有一定的空闲页可以使用。
空闲页数量达不到保留数目,InnoDB会将LRU列表末尾的页移除。
如果移除的页中有脏页,则需要进行Checkpoint。
Mysql5.6开始,FLUSH LRU LIST Checkpoint 放在 Page Cleaner Thread中完成。
innodb_lru_scan_depth 为 保留的空闲页面数,默认为1024。
SHOW VARIABLES LIKE 'innodb_lru_scan_depth' innodb_lru_scan_depth 1024
3、Async/Sync Flush Checkpoint
重做日志不够用了,需要刷一些日志回磁盘。


Async/Sync Flush Checkpoint 也是放在 Page Cleaner Thread中完成。
可以通过 SHOW ENGINE INNODB STATUS 查看Checkpoint次数信息:

4、Dirty Page Too Much Checkpoint
当脏页比例达到一定数量时,强制进行Checkpoint。
该比例由 innodb_max_dirty_pages_pct 设置:
SHOW VARIABLES LIKE 'innodb_max_dirty_pages_pct' innodb_max_dirty_pages_pct 90.000000
浙公网安备 33010602011771号