您好,登錄后才能下訂單哦!
InnoDB的Checkpoint技術是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
一句話概括,Checkpoint技術就是將緩存池中臟頁在某個時間點刷回到磁盤的操作
都知道緩沖池的出現就是為了解決CPU與磁盤速度之間的鴻溝,免得我們在讀寫數據庫時還需要進行磁盤IO操作。有了緩沖池后,所有的頁操作首先都是在緩沖池內完成的。
如一個DML語句,進行數據update或delete 操作時,此時改變了緩沖池頁中的記錄,此時因為緩沖池頁的數據比磁盤的新,此時的頁就叫做臟頁。
不管怎樣,總會后的內存頁數據需要刷回到磁盤里,這里就涉及幾個問題:
WAL策略解決了刷新頁數據到磁盤時發生宕機而導致數據丟失的問題,它是關系數據庫系統中用于提供原子性和持久性(ACID 屬性中的兩個)的一系列技術。
redo log
,每當有事務提交時,先寫入 redo log
(重做日志),在修改緩沖池數據頁,這樣當發生掉電之類的情況時系統可以在重啟后繼續操作
InnoDB為了保證數據不丟失,維護了redo log。在緩沖池的數據頁修改之前,需要先將修改的內容記錄到redo log中,并保證redo log早于對應的數據頁落盤,這就是WAL策略。
當故障發生而導致內存數據丟失后,InnoDB會在重啟時,通過重放redo log,將緩沖池數據頁恢復到崩潰前的狀態。
按理說有了WAL策略,我們就可以高枕無憂了。但其問題點又出現在redo log上面:
所以為了解決臟頁的刷新性能,臟頁應該在什么時間、什么情況下進行臟頁的刷新就用到了Checkpoint技術。
1、縮短數據庫的恢復時間
當數據庫怠機恢復時,不需要重做所有的日志信息。因為Checkpoint前的數據頁已經刷回到磁盤了。只需要Checkpoint后的redo log進行恢復就好了。
2、緩沖池不夠用時,將臟頁刷新到磁盤
當緩沖池空間不足時,根據LRU算法會溢出最近最少使用的頁,若此頁為臟頁,那么需要強制執行Checkpoint,將臟頁也就是頁的新版本刷回磁盤。
3、redo log不可用時,刷新臟頁
如圖redo log 的不可用是因為當前數據庫對其設計都是循環使用的,所以其空間并不是無限大。
當redo log被寫滿, 因為此時系統不能接受更新, 所有更新語句都會被堵住。
此時必須強制產生Checkpoint需要將 write pos 向前推進,推進范圍內的臟頁都需要刷新到磁盤
Checkpoint發生的時間、條件及臟頁的選擇等都非常復雜。
Checkpoint 每次刷新多少臟頁到磁盤?
Checkpoint每次從哪里取臟頁?
Checkpoint 什么時間被觸發?
面對上面的問題,InnoDB存儲引擎內部為我們提供了兩種Checkpoint:
Sharp Checkpoint
發生在數據庫關閉時將所有的臟頁都刷新回磁盤,這是默認的工作方式,參數innodb_fast_shutdown=1
Fuzzy Checkpoint
InnoDB存儲引擎內部使用這種模式,只刷新一部分臟頁,而不是刷新所有的臟頁回磁盤
FuzzyCheckpoint發生的情況
Master Thread Checkpoint
差不多以每秒或每十秒的速度從緩沖池的臟頁列表中刷新一定比例的頁回磁盤。
這個過程是異步的,即此時InnoDB存儲引擎可以進行其他的操作,用戶查詢線程不會阻塞
FLUSH_LRU_LIST Checkpoint
因為LRU列表要保證一定數量的空閑頁可被使用,所以如果不夠會從尾部移除頁,如果移除的頁有臟頁,就會進行此Checkpoint。
5.6版本后,這個Checkpoint放在了一個單獨的Page Cleaner線程中進行,并且用戶可以通過參數innodb_lru_scan_depth控制LRU列表中可用頁的數量,該值默認為1024
Async/Sync Flush Checkpoint
指的是redo log文件不可用的情況,這時需要強制將一些頁刷新回磁盤,而此時臟頁是從臟頁列表中選取的
5.6版本后不會阻塞用戶查詢
Dirty Page too much Checkpoint 即臟頁的數量太多,導致InnoDB存儲引擎強制進行Checkpoint。
其目的總的來說還是為了保證緩沖池中有足夠可用的頁。
其可由參數innodb_max_dirty_pages_pct控制,比如該值為75,表示當緩沖池中臟頁占據75%時,強制進行CheckPoint
因為CPU和磁盤間的鴻溝的問題,從而出現緩沖池數據頁來加快數據庫DML操作
因為緩沖池數據頁與磁盤數據一致性的問題,從而出現WAL策略(核心就是redo log)
因為緩沖池臟頁的刷新性能問題,從而出現Checkpoint技術
InnoDB 為了提高執行效率,并不會每次DML操作都和磁盤交互進行持久化。而是通過Write Ahead Log 先策略寫入redo log保證事物的持久化。
對于事物中修改的緩沖池臟頁,會通過異步的方式刷盤,而內存空閑頁和redo log的可用是通過Checkpoint技術來保證的。
感謝各位的閱讀!看完上述內容,你們對InnoDB的Checkpoint技術是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。