一 簡介:今天咱們來聊聊checkpoint
二 定義:
checkpoin是重做日誌對資料頁重新整理到磁碟的操作做的檢查點,通過LSN號儲存記錄,作用是當發生宕機等crash情況時,再次啟動時會查詢checkpoint點,在該檢查點之後發生的事物修改恢復到磁碟。
三 作用:
1 縮短資料庫的恢復時間
資料庫恢復時間重做日誌中記錄了的checkpoint的位置,這個點之前的頁已經重新整理回磁碟,只需要對checkpoint之後的重做日誌進行恢復。這樣就大大縮短了恢復時間。
2 緩衝池不夠用或者觸發髒頁百分比機制,將髒頁重新整理回磁碟
緩衝池不夠用時,根據LRU演算法,溢位最近最少使用的頁,如果頁為髒頁,強制執行checkpoint,將頁重新整理回磁碟,達到髒頁比時候,也會自動觸發.
3 重做日誌不可用(不可被重用,不可被覆蓋),重新整理髒頁
重做日誌不可用,是指,重做日誌的這部分不可以被覆蓋,為什麼?因為:這部分對應的資料還未重新整理到磁碟上。重做日誌的設計是迴圈使用的。資料庫恢復時,如果不需要,即可被覆蓋;如果需要,必須強制執行checkpoint,將緩衝池中的頁至少重新整理到當前重做日誌的位置
四 主要工作
checkpoint:將緩衝池中的髒頁刷回到磁碟。
五 重新整理方式
InnoDB儲存引擎內部,兩種checkpoint,分別為:
- Sharp Checkpoint 適用於資料庫關閉時的一致性重新整理 (資料庫關閉時 觸發)
- Fuzzy Checkpoint 適用於資料庫執行時的部分頁重新整理 (資料庫執行時週期性觸發)
六 資料庫關閉方式引數講解
在關閉時,引數innodb_fast_shutdown影響著表的儲存引擎為InnoDB的行為。該引數可取值為0、1、2。
- 0代表當MySQL關閉時,InnoDB需要完成所有的full purge和merge insert buffer操作,這會需要一些時間,有時甚至需要幾個小時來完成。如果在做InnoDB plugin升級,通常需要將這個引數調為0,然後再關閉資料庫。
- 1是該引數的預設值,表示不需要完成上述的full purge和merge insert buffer操作,但是在緩衝池的一些資料髒頁還是會重新整理到磁碟。
- 2表示不完成full purge和merge insert buffer操作,也不將緩衝池中的資料髒頁寫回磁碟,而是將日誌都寫入日誌檔案。這樣不會有任何事務會丟失,但是MySQL資料庫下次啟動時,會執行恢復操作(recovery)
可以發現,設定shutdown級別也會影響著checkpoint的操作,比如Sharp Checkpoint 不會在=2的情況下觸發