checkpoint技術
前篇 innodb體系架構(二)記憶體 從緩衝池、緩衝池的管理、重做日誌緩衝、額外記憶體緩衝這四個點介紹了innodb儲存引擎的記憶體結構,而在將緩衝池的資料重新整理到磁碟的過程中使用到了checkpoint技術,這篇文章我們著重講解一下checkpoint在記憶體中到應用。
一、checkpoint使用背景
由於日常dml語句,如:update / delete操作首先操作了緩衝池的資料,並沒有立即寫入到磁碟,這有可能會導致記憶體中資料與磁碟中的資料產生不一致的情況。而與磁碟資料不一致的緩衝池的頁就是我們常說的髒頁。所以checkpoint的工作就是將記憶體中的髒頁,在一定條件下重新整理到磁碟。
如果在從緩衝池將頁資料重新整理到磁碟的過程中發生宕機,那麼資料就無法恢復了;為了避免這種情況的發生,採用了write ahead log策略,即當事務提交時,先寫重做日誌,再修改頁,這樣發生宕機也可以通過重做日誌進行恢復。
二、checkpoint的目的
1. 如果重做日誌太大,那麼資料庫啟動的時候恢復時間過長;
2. 緩衝池不夠用時,需要先將髒頁資料重新整理到磁碟中;
3. 重做日誌不可用時,重新整理髒頁到磁碟;
三、checkpoint的運作機制
在了解運作機制之前,先來思考一下這幾個問題:checkpoint發生的時間? 發生的條件? 髒頁(物件)的選擇?
在innodb儲存引擎內部,checkpoint分為了兩種:
(一) sharp checkpoint
sharp checkpoint 發生在資料庫關閉時,將所有的髒頁都重新整理回磁碟,這是預設的工作方式,引數:innodb_fast_shutdown=1。
(二)fuzzy checkpoint
在innodb儲存引擎執行時,使用fuzzy checkpoint進行頁重新整理,只重新整理一部分髒頁。在以下四種情況下會出發fuzzy checkpoint:
1. master thread checkpoint
對於master thread,以每秒或者每n秒的速度將緩衝池的髒頁列表重新整理一定比例的頁回磁碟,這個過程是非同步的,使用者查詢執行緒不會阻塞。
2. flush_lru_list checkpoint
為了保證lru列表中有100個左右的空閒頁可使用,在innodb 1.1.x版本之前,使用者查詢執行緒會檢查lru列表是否有足夠的空間操作。如果沒有,根據lru演算法,溢位lru列表尾端的頁,如果這些頁有髒頁,需要進行checkpoint。因此叫:flush_lru_list checkpoint。
3. async/sync flush checkpoint
async/sync flush checkpoint 發生在重做日誌不可用的時候(滿了),將buffer pool中的一部分髒頁重新整理到磁碟中,在髒頁寫入磁碟之後,事物對應的重做日誌也就可以釋放了。關於redo_log檔案的的大小,可以通過innodb_log_file_size來配置。
4. dirty page too much checkpoint
即髒頁太多,強制checkpoint,保證緩衝池有足夠可用的頁。
引數設定:innodb_max_dirty_pages_pct = 75 表示:當緩衝池中髒頁的數量佔75%時,強制checkpoint。1.0.x之後預設75
innodb 體系架構
innodb儲存引擎的體系架構,可簡單劃分成三層 資料檔案 磁碟上的資料檔案 記憶體池 快取磁碟上的資料,方便讀取,同時在對磁碟檔案資料修改之前在這裡快取,然後按一定規重新整理到磁碟 後台執行緒 主要負責重新整理記憶體池中的資料,保證記憶體池中都是最近資料。同時將記憶體中修改的資料重新整理到磁碟 磁...
InnoDB體系架構
reference innodb主要包括了記憶體池 後台執行緒以及儲存檔案。記憶體池又是由多個記憶體塊組成的,主要包括快取磁碟資料 redo log緩衝等 後台執行緒則包括了master thread io thread以及purge thread等 由innodb儲存引擎實現的表的儲存結構檔案一般...
InnoDB體系架構總結(一)
緩衝池 是一塊記憶體區域,通過記憶體的速度來彌補磁碟速度較慢對資料庫效能的影響。在資料庫中讀取的頁資料會存放到緩衝池中,下次再讀取相同頁的時候,會首先判斷 該頁是否在緩衝池中。對於資料庫中頁的修改操作,會首先修改在緩衝池中的頁,然後再以一定的頻率重新整理到磁碟上。緩衝池中快取的資料頁有 索引頁,資料...