Checkpoint的機制
一、Checkpoint機制
CheckPoint做了什么事情?將緩存池中的臟頁刷回磁盤。
checkpoint定期將db buffer的內容刷新到data file,當遇到內存不足、db buffer已滿等情況時,需要將db buffer中的內容/部分內容(特別是臟數據)轉儲到data file中。
?在轉儲時,會記錄checkpoint發(fā)生的位置,在故障回復時候,只需要redo/undo最近的一次checkpoint之后的操作。
?

?
?
二、CheckPoint作用
1、縮短數據庫的恢復時間
當數據庫宕機時,數據庫不需要重做所有日志,因為CheckPoint之前的頁都已經刷新回磁盤。只需對CheckPoint后的重做日志進行恢復,從而縮短恢復時間
?
2、緩沖池不夠用時,將臟頁刷新到磁盤
當緩存池不夠用時,LRU算法會溢出最近最少使用的頁,若此頁為臟頁,會強制執(zhí)行CheckPoint,將該臟頁刷回磁盤
?
3、Redo日志不可用時,刷新臟頁
不可用是因為對重做日志的設計是循環(huán)使用的。重做日志可以被重用的部分,是指當數據庫進行恢復操作時不需要的部分。若此時這部分重做日志還有用,將強制執(zhí)行CheckPoint,將緩沖池的頁至少刷新到當前重做日志的位置
?
三、CheckPoint種類
InnoDB存儲引擎內部,有兩種Checkpoint,分別為:Sharp Checkpoint、Fuzzy Checkpoint
?
1、Sharp CheckPoint
發(fā)生在數據庫關閉時,會將所有的臟頁刷回磁盤,這是默認的工作方式,即參數innodb_fast_shutdown=1。
但是若數據庫在運行時也使用Sharp Checkpoint,那么數據庫的可用性就會受到很大的影響。故在InnoDB存儲引擎內部使用Fuzzy Checkpoint進行頁的刷新,即只刷新一部分臟頁,而不是刷新所有的臟頁回磁盤。
?
2、Fuzzy CheckPoint
為提高性能,數據庫運行時使用Fuzzy CheckPoint進行頁的刷新,即只刷新一部分臟頁。
?
Fuzzy Checkpoint(模糊檢查點):
Master Thread Checkpoint;
FLUSH_LRU_LIST Checkpoint;
Async/Sync Flush Checkpoint;
Dirty Page too much Checkpoint
?
在Innodb事務日志中,采用了Fuzzy Checkpoint,Innodb每次取最老的modified page(last checkpoint)對應的LSN,再將此臟頁的LSN作為Checkpoint點記錄到日志文件,意思就是此LSN之前的LSN對應的日志和數據都已經flush到redo log。