InnoDB的Checkpoint技術(shù)是什么?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

一句話概括,Checkpoint技術(shù)就是將緩存池中臟頁在某個(gè)時(shí)間點(diǎn)刷回到磁盤的操作

都知道緩沖池的出現(xiàn)就是為了解決CPU與磁盤速度之間的鴻溝,免得我們在讀寫數(shù)據(jù)庫時(shí)還需要進(jìn)行磁盤IO操作。有了緩沖池后,所有的頁操作首先都是在緩沖池內(nèi)完成的。
如一個(gè)DML語句,進(jìn)行數(shù)據(jù)update或delete 操作時(shí),此時(shí)改變了緩沖池頁中的記錄,此時(shí)因?yàn)榫彌_池頁的數(shù)據(jù)比磁盤的新,此時(shí)的頁就叫做臟頁。
不管怎樣,總會(huì)后的內(nèi)存頁數(shù)據(jù)需要刷回到磁盤里,這里就涉及幾個(gè)問題:
WAL策略解決了刷新頁數(shù)據(jù)到磁盤時(shí)發(fā)生宕機(jī)而導(dǎo)致數(shù)據(jù)丟失的問題,它是關(guān)系數(shù)據(jù)庫系統(tǒng)中用于提供原子性和持久性(ACID 屬性中的兩個(gè))的一系列技術(shù)。
redo log,每當(dāng)有事務(wù)提交時(shí),先寫入 redo log(重做日志),在修改緩沖池?cái)?shù)據(jù)頁,這樣當(dāng)發(fā)生掉電之類的情況時(shí)系統(tǒng)可以在重啟后繼續(xù)操作
InnoDB為了保證數(shù)據(jù)不丟失,維護(hù)了redo log。在緩沖池的數(shù)據(jù)頁修改之前,需要先將修改的內(nèi)容記錄到redo log中,并保證redo log早于對應(yīng)的數(shù)據(jù)頁落盤,這就是WAL策略。
當(dāng)故障發(fā)生而導(dǎo)致內(nèi)存數(shù)據(jù)丟失后,InnoDB會(huì)在重啟時(shí),通過重放redo log,將緩沖池?cái)?shù)據(jù)頁恢復(fù)到崩潰前的狀態(tài)。
按理說有了WAL策略,我們就可以高枕無憂了。但其問題點(diǎn)又出現(xiàn)在redo log上面:
所以為了解決臟頁的刷新性能,臟頁應(yīng)該在什么時(shí)間、什么情況下進(jìn)行臟頁的刷新就用到了Checkpoint技術(shù)。
1、縮短數(shù)據(jù)庫的恢復(fù)時(shí)間
當(dāng)數(shù)據(jù)庫怠機(jī)恢復(fù)時(shí),不需要重做所有的日志信息。因?yàn)镃heckpoint前的數(shù)據(jù)頁已經(jīng)刷回到磁盤了。只需要Checkpoint后的redo log進(jìn)行恢復(fù)就好了。
2、緩沖池不夠用時(shí),將臟頁刷新到磁盤
當(dāng)緩沖池空間不足時(shí),根據(jù)LRU算法會(huì)溢出最近最少使用的頁,若此頁為臟頁,那么需要強(qiáng)制執(zhí)行Checkpoint,將臟頁也就是頁的新版本刷回磁盤。
3、redo log不可用時(shí),刷新臟頁

如圖redo log 的不可用是因?yàn)楫?dāng)前數(shù)據(jù)庫對其設(shè)計(jì)都是循環(huán)使用的,所以其空間并不是無限大。
當(dāng)redo log被寫滿, 因?yàn)榇藭r(shí)系統(tǒng)不能接受更新, 所有更新語句都會(huì)被堵住。
此時(shí)必須強(qiáng)制產(chǎn)生Checkpoint需要將 write pos 向前推進(jìn),推進(jìn)范圍內(nèi)的臟頁都需要刷新到磁盤
Checkpoint發(fā)生的時(shí)間、條件及臟頁的選擇等都非常復(fù)雜。
Checkpoint 每次刷新多少臟頁到磁盤?
Checkpoint每次從哪里取臟頁?
Checkpoint 什么時(shí)間被觸發(fā)?
面對上面的問題,InnoDB存儲(chǔ)引擎內(nèi)部為我們提供了兩種Checkpoint:
Sharp Checkpoint
發(fā)生在數(shù)據(jù)庫關(guān)閉時(shí)將所有的臟頁都刷新回磁盤,這是默認(rèn)的工作方式,參數(shù)innodb_fast_shutdown=1
Fuzzy Checkpoint
InnoDB存儲(chǔ)引擎內(nèi)部使用這種模式,只刷新一部分臟頁,而不是刷新所有的臟頁回磁盤
FuzzyCheckpoint發(fā)生的情況
Master Thread Checkpoint
差不多以每秒或每十秒的速度從緩沖池的臟頁列表中刷新一定比例的頁回磁盤。
這個(gè)過程是異步的,即此時(shí)InnoDB存儲(chǔ)引擎可以進(jìn)行其他的操作,用戶查詢線程不會(huì)阻塞
FLUSH_LRU_LIST Checkpoint
因?yàn)長RU列表要保證一定數(shù)量的空閑頁可被使用,所以如果不夠會(huì)從尾部移除頁,如果移除的頁有臟頁,就會(huì)進(jìn)行此Checkpoint。
5.6版本后,這個(gè)Checkpoint放在了一個(gè)單獨(dú)的Page Cleaner線程中進(jìn)行,并且用戶可以通過參數(shù)innodb_lru_scan_depth控制LRU列表中可用頁的數(shù)量,該值默認(rèn)為1024
Async/Sync Flush Checkpoint
指的是redo log文件不可用的情況,這時(shí)需要強(qiáng)制將一些頁刷新回磁盤,而此時(shí)臟頁是從臟頁列表中選取的
5.6版本后不會(huì)阻塞用戶查詢
Dirty Page too much Checkpoint 即臟頁的數(shù)量太多,導(dǎo)致InnoDB存儲(chǔ)引擎強(qiáng)制進(jìn)行Checkpoint。
其目的總的來說還是為了保證緩沖池中有足夠可用的頁。
其可由參數(shù)innodb_max_dirty_pages_pct控制,比如該值為75,表示當(dāng)緩沖池中臟頁占據(jù)75%時(shí),強(qiáng)制進(jìn)行CheckPoint
因?yàn)镃PU和磁盤間的鴻溝的問題,從而出現(xiàn)緩沖池?cái)?shù)據(jù)頁來加快數(shù)據(jù)庫DML操作
因?yàn)榫彌_池?cái)?shù)據(jù)頁與磁盤數(shù)據(jù)一致性的問題,從而出現(xiàn)WAL策略(核心就是redo log)
因?yàn)榫彌_池臟頁的刷新性能問題,從而出現(xiàn)Checkpoint技術(shù)
InnoDB 為了提高執(zhí)行效率,并不會(huì)每次DML操作都和磁盤交互進(jìn)行持久化。而是通過Write Ahead Log 先策略寫入redo log保證事物的持久化。
對于事物中修改的緩沖池臟頁,會(huì)通過異步的方式刷盤,而內(nèi)存空閑頁和redo log的可用是通過Checkpoint技術(shù)來保證的。
感謝各位的閱讀!看完上述內(nèi)容,你們對InnoDB的Checkpoint技術(shù)是什么大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道。
網(wǎng)頁標(biāo)題:InnoDB的Checkpoint技術(shù)是什么-創(chuàng)新互聯(lián)
本文URL:http://chinadenli.net/article42/hhgec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站維護(hù)、ChatGPT、全網(wǎng)營銷推廣、面包屑導(dǎo)航、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容