1. Checkpoint技术主要解决的问题:
-
缩短数据库的恢复时间;
-
缓冲池不够用时,将脏页刷新到磁盘;
-
重做日志不可用时。刷新脏页。
2. Checkpoint分类
在InnoDB引擎中,Checkpoint发生的时间、条件及脏页的选择等都非常复杂。而Checkpoint所做的事情无外乎是将缓冲池中的脏页刷新回到磁盘。不同之处在于每次刷新多少页到磁盘、每次从哪里取脏页、以及什么时间触发Checkpoint。在InnoDB内部有两种Checkpoint,分别为:Sharp Checkpoint和Fuzzy Checkpoint。
- Sharp Checkpoint 发生在数据库关闭时将所有的脏页都刷新回磁盘。
- Fuzzy Checkpoint 只刷新部分脏页,而不是刷新所有的脏页回磁盘。
3. Fuzzy Checkpoint可能发生的几种情况
- Master Thread Checkpoint
- FLUSH_LRU_LIST Checkpoint
- Async/Sync Flush Checkpoint
- Dirty page too much Checkpoint
Master Thread Checkpoint ,差不多一每秒或者每十秒的速度从缓冲池的脏页列表刷新一定比例的页回磁盘。这个过程是异步的,不会阻塞用户查询线程。
FLUSH_LRU_LIST Checkpoint 由于InnoDB存储引擎需要保证LRU列表中需要有差不多100个空闲也可供使用。若没有100个空闲页,那么InnoDB存储引擎会将LRU列表尾端的页移除。如果这些页有脏页,那么就需要Checkpoint,而这些页来自LRU列表的,因此成为FLUSH_LRU_LIST Checkpoint。不会阻塞用户查询线程。
Async/Sync Flush Checkpoint 指的是重做日志文件不可用的情况,这是强制将一些页刷新回磁,这些页是从脏页列表中选取的。Async/Sync Flush Checkpoint的目的是为了保证重做日志的循环使用的可用性。Mysql5.6版本之后不会阻塞用户查询线程。
Dirty page too much Checkpoint 是脏也得数量太多导致InnoDB存储引擎强制进行Checkpoint。目的是为了保证缓冲池中有足够可用的页。 使用命令 show variables like “innodb_max_dirty_page_%”; 可查看innodb_max_dirty_pages_pct 的值为75,表示当前缓冲池中脏页的数量占据75%时,强制进行Checkpoint,刷新一部分脏页到磁盘。