innodb儲存引擎的體系架構,可簡單劃分成三層:
資料檔案 :磁碟上的資料檔案
記憶體池:快取磁碟上的資料,方便讀取,同時在對磁碟檔案資料修改之前在這裡快取,然後按一定規重新整理到磁碟
後台執行緒:主要負責重新整理記憶體池中的資料,保證記憶體池中都是最近資料。同時將記憶體中修改的資料重新整理到磁碟
磁碟中資料檔案如何存放,存放規則等,我們稍後講解。本章主要說明記憶體池的模型和後台執行緒功能
首先,我們梳理一下innodb記憶體池。記憶體池包括三部分
innodb儲存引擎記憶體池(多執行緒模型)後台執行緒主要負責重新整理記憶體池中的資料,保證記憶體快取最近資料。
快取池中頁(大小16k)資料管理演算法: lru(最近最少使用演算法)維護乙個列表,innodb稍作修改,新增midpoint,新資料新增到列表5/8處,而不是列表頭部,可通過配置檔案修改midpoint。通過該演算法將磁碟中的資料快取到記憶體中,方便讀取。
髒頁:我們知道,當我們通過sql修改資料,並不是直接修改磁碟中資料庫檔案,而是修改記憶體中的資料。這種就造成磁碟資料和記憶體資料不一致,我們稱這種資料所在的頁為髒頁。
為了使記憶體中的資料和磁碟資料一致,必須有一種同步機制。innodb重新整理快取池頁到磁碟中,使用checkpoint機制重新整理 。
checkpoint機制可簡單分為兩種:
那麼重新整理一部分髒頁資料到磁碟又是如何進行的呢,這就要說明下innodb的後台執行緒了,每個執行緒都有固定規則對髒頁進行重新整理。
innode後台執行緒:
在此,就以master thread執行緒為例。在該執行緒中,主迴圈**功能:
每1/s操作:
10/s操作:
在早期由於機械硬碟,髒頁比例都是在**中硬編碼的,現今ssd,io速度快,所以innodb優化以後,可通過配置檔案修改髒頁比例,具體可搜innodb_io_capacity引數說明
總結fuzzy checkpoint(重新整理一部分髒頁資料) 主要有以下幾種:
InnoDB體系架構
reference innodb主要包括了記憶體池 後台執行緒以及儲存檔案。記憶體池又是由多個記憶體塊組成的,主要包括快取磁碟資料 redo log緩衝等 後台執行緒則包括了master thread io thread以及purge thread等 由innodb儲存引擎實現的表的儲存結構檔案一般...
InnoDB體系架構(三)Checkpoint技術
checkpoint技術 前篇 innodb體系架構 二 記憶體 從緩衝池 緩衝池的管理 重做日誌緩衝 額外記憶體緩衝這四個點介紹了innodb儲存引擎的記憶體結構,而在將緩衝池的資料重新整理到磁碟的過程中使用到了checkpoint技術,這篇文章我們著重講解一下checkpoint在記憶體中到應用...
InnoDB體系架構總結(一)
緩衝池 是一塊記憶體區域,通過記憶體的速度來彌補磁碟速度較慢對資料庫效能的影響。在資料庫中讀取的頁資料會存放到緩衝池中,下次再讀取相同頁的時候,會首先判斷 該頁是否在緩衝池中。對於資料庫中頁的修改操作,會首先修改在緩衝池中的頁,然後再以一定的頻率重新整理到磁碟上。緩衝池中快取的資料頁有 索引頁,資料...