您好,登錄后才能下訂單哦!
這篇文章主要講解了“什么是checkpoint技術”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“什么是checkpoint技術”吧!
MySQL中,一條DML語句,如delete或者update,改變了頁中的記錄,那么此時頁是臟的,即緩沖池的頁的版本比磁盤的新,數據庫需要將緩沖池的數據刷新到磁盤。
如果每次緩沖池的頁發生變化,都要將新版本的頁刷新到磁盤,那么性能消耗一定很大,如果將臟頁刷新到磁盤的過程中發生宕機,那么數據就不能恢復了。為了避免發生數據丟失的問題,事務數據庫系統都采用了Write Ahead Log的策略,即日志先行,先寫重做日志,再修改頁。
假設以下場景,是不是緩沖池的臟頁可以不刷回磁盤?
1、緩沖池足夠大,可以緩沖磁盤的所有數據
2、重做日志可以無限增大
對于第一個場景:
生產環境中,3TB體量的數據庫已不少見,甚至更大,而3TB內存的服務器卻幾乎沒有,所以這種場景幾乎不可能。
對于第二個場景:
重做日志無限增大,意味著DBA或者SA需要實時監控存儲的使用情況,且設備可以無限動態擴展,這種場景也幾乎不可能實現。
即便上述場景可以實現,可是一旦MySQL服務器宕機,重新應用重做日志的時間會非常久,甚至達到幾年。
因此出現了checkpoint技術,主要解決以下問題:
1、縮短數據庫的恢復時間
2、緩沖池不夠用時,將臟頁刷新到磁盤
3、重做日志不可用時,刷新臟頁
在innodb內部,有兩種checkpoint,分別為:
Sharp Checkpoint
Fuzzy Checkpoint
sharp checkpoint即數據庫發生關閉時候,將臟頁刷新到磁盤,這是默認的工作方式,即innodb_fast_shutdown=1。
若數據庫運行時候采用sharp checkpoint,那么數據庫的可用性將受到很大影響。數據庫運行時候采用fuzzy checkpoint刷新臟頁,即只刷新部分臟頁,而不是所有臟頁到磁盤。
innodb可能發生以下幾種情況的sharp checkpoint:
Master Thread Checkpoint
FLUSH_LRU_LIST Checkpoint
Asnc/Sync Flush Checkpoint
Dirty Page too much Checkpoint
Master Thread Checkpoint
新版本將刷臟獨立為page cleaner thread,每秒或者每十秒將臟頁刷新到磁盤。
FLUSH_LRU_LIST Checkpoint
LRU列表沒有足夠空閑頁時候,刷臟。
FLUSH_LRU_LIST Checkpoint
重做日志不可用的時候,進行刷臟。
Dirty Page too much Checkpoint
緩沖池臟頁太多時候,自動刷臟,由參數innodb_max_dirty_pages_pct控制,其值為75時,表示緩沖池臟頁占據75%時候,將強制checkpoint,刷新一部分臟頁到磁盤。
感謝各位的閱讀,以上就是“什么是checkpoint技術”的內容了,經過本文的學習后,相信大家對什么是checkpoint技術這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。