久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

InnoDB的Checkpoint技術是什么

147次閱讀
沒有評論

共計 2465 個字符,預計需要花費 7 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

InnoDB 的 Checkpoint 技術是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是丸趣 TV 小編給大家帶來的參考內容,讓我們一起來看看吧!

一句話概括,Checkpoint 技術就是將緩存池中臟頁在某個時間點刷回到磁盤的操作

遇到的問題?

InnoDB 的 Checkpoint 技術是什么

都知道緩沖池的出現就是為了解決 CPU 與磁盤速度之間的鴻溝,免得我們在讀寫數據庫時還需要進行磁盤 IO 操作。有了緩沖池后,所有的頁操作首先都是在緩沖池內完成的。

如一個 DML 語句,進行數據 update 或 delete 操作時,此時改變了緩沖池頁中的記錄,此時因為緩沖池頁的數據比磁盤的新,此時的頁就叫做臟頁。

不管怎樣,總會后的內存頁數據需要刷回到磁盤里,這里就涉及幾個問題:

若每次一個頁發生變化,就將新頁的版本刷新到磁盤,那么這個開銷是非常大的若熱點數據集中在某幾個頁中,那么數據庫的性能將變得非常差如果在從緩沖池將頁的新版本刷新到磁盤時發生了宕機,那么數據就不能恢復了 Write Ahead Log(預寫式日志)

WAL 策略解決了刷新頁數據到磁盤時發生宕機而導致數據丟失的問題,它是關系數據庫系統中用于提供原子性和持久性(ACID 屬性中的兩個)的一系列技術。

WAL 策略核心點就是

redo log,每當有事務提交時,先寫入 redo log(重做日志),在修改緩沖池數據頁,這樣當發生掉電之類的情況時系統可以在重啟后繼續操作

WAL 策略機制原理

InnoDB 為了保證數據不丟失,維護了 redo log。在緩沖池的數據頁修改之前,需要先將修改的內容記錄到 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 技術來保證的。

感謝各位的閱讀!看完上述內容,你們對 InnoDB 的 Checkpoint 技術是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注丸趣 TV 行業資訊頻道。

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計2465字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 得荣县| 方正县| 博兴县| 北海市| 大厂| 舟曲县| 津市市| 惠安县| 光泽县| 吉安市| 汉中市| 海门市| 桓台县| 古蔺县| 徐闻县| 开阳县| 花垣县| 珠海市| 旬邑县| 冕宁县| 华阴市| 邹城市| 志丹县| 惠来县| 陆良县| 开封县| 内黄县| 广汉市| 资中县| 灯塔市| 东莞市| 高尔夫| 绍兴市| 柘荣县| 广宗县| 红河县| 慈溪市| 宁国市| 五寨县| 灌南县| 陕西省|