首頁 > 資料庫 > mysql教程 > 了解InnoDB的Checkpoint技術

了解InnoDB的Checkpoint技術

coldplay.xixi
發布: 2020-10-28 17:14:33
轉載
2577 人瀏覽過

##mysql教學##欄位帶大家了解InnoDB的Checkpoint技術。

了解InnoDB的Checkpoint技術

了解InnoDB的Checkpoint技術

################ ###########################就是在某個時間點刷磁碟回到儲存池中的動作######## #遇到的問題?###############都知道緩衝池的出現是為了解決CPU與磁碟速度之間的鴻溝,免得我們在讀寫資料庫的時候還需要進行磁碟IO操作。有了緩衝池後,所有的頁操作首先都是在緩衝池內完成的。## ####如一個DML語句,進行更新資料或刪除操作時,此時改變了緩衝池頁中的記錄,此時因為緩衝池頁的資料比磁碟的新,此時的頁就稱為髒頁。######不管怎樣,總會後的記憶體頁資料需要刷回磁碟裡,這裡就涉及幾個問題:#########如果每次一個頁發生變化,就將新的第一個版本刷新到磁碟,那麼這個頭部是非常大的######如果熱點資料集中在某幾個頁中,那麼資料庫的效能將會變得非常差######如果在緩衝池將頁的新版本刷新到磁碟時發生了宕機,那麼資料就無法恢復了########Write Ahead Log(預寫式日誌)######WAL策略解決了刷新第一張資料到磁碟時發生宕機而導致資料遺失的問題,是關係資料庫系統中用於提供原子性和持久性(ACID屬性中的兩個)的一系列技術。######WAL策略核心點修改就是#########redo log###,每當有交易提交時,先寫入###redo log###(重做日誌),在緩衝資料池頁面,這樣當發生掉電之類的情況時系統可以在重啟後繼續操作##### #WAL策略機制原理######InnoDB為了確保資料不會遺失,維護了重做日誌。在緩衝池的資料頁修改之前,需要先將記錄的內容到redo log中,並確保redo log早於對應的資料頁落盤,這就是WAL策略。###

當故障發生而導致記憶體資料遺失後,InnoDB會在重新啟動時,透過重播redo log,將緩衝池資料頁恢復到崩潰前的狀態。

Checkpoint

照理說有了WAL策略,我們就可以高枕無憂了。但其問題點又出現在redo log上面:

  • redo log 不可能是無限大的,不能沒完沒了的存儲我們的資料等待一起刷新到磁碟
  • 在資料庫怠機復原時,如果redo log 太大的話恢復的代價也是非常大的

#所以為了解決髒頁的刷新效能,髒頁應該在什麼時間、什麼情況下進行髒頁的刷新就用到了Checkpoint技術。

Checkpoint 的目的

1、縮短資料庫的復原時間

當資料庫怠機復原時,不需要重做所有的日誌資訊。因為Checkpoint前的資料頁已經刷回磁碟了。只需要Checkpoint後的redo log進行恢復就好了。

2、緩衝池不夠用時,將髒頁刷新到磁碟

當緩衝池空間不足時,根據LRU演算法會溢出最近最少使用的頁,若此頁為髒頁,那麼需要強制執行Checkpoint,將髒頁也就是頁的新版本刷回磁碟。

3、redo log不可用時,刷新髒頁

了解InnoDB的Checkpoint技術

#如圖redo log 的不可用是因為當前資料庫對其設計都是循環使用的,所以其空間並不是無限大。

當redo log被寫滿, 因為此時系統不能接受更新, 所有更新語句都會被堵住。

此時必須強制產生Checkpoint需要將write pos 向前推進,推進範圍內的髒頁都需要刷新到磁碟

Checkpoint 的種類

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技術來保證的。

更多相關免費學習推薦:mysql教學##(影片)

#

以上是了解InnoDB的Checkpoint技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.im
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板