InnoDB內(nèi)部架構(gòu)

內(nèi)存模型:

1.緩沖池

InnoDB存儲引擎是基于磁盤儲存的珊蟀,并將其中的記錄按照頁的方式進行管理。由于CPU速度與磁盤速度之間的鴻溝外驱,InnoDB采用了緩沖池技術(shù)來提高數(shù)據(jù)庫的整體性能育灸。

緩沖池簡單來鎖就是一塊內(nèi)存區(qū)域,通過內(nèi)存的速度來彌補磁盤速度較慢對數(shù)據(jù)庫性能的影響昵宇。在數(shù)據(jù)庫中進行讀取頁的操作磅崭,首先會從磁盤上讀取的頁存放在緩沖池中,如果下一次再讀取相同的頁時該頁仍在緩沖池中瓦哎,那么就會直接在內(nèi)存中讀取該頁砸喻。在數(shù)據(jù)庫中進行對頁的修改操作,則首先修改在緩沖池中的頁蒋譬,然后再以一定的頻率刷新到磁盤上割岛。這里需要注意的是,頁從緩沖池中刷新回磁盤的操作并不是發(fā)生在頁更新時犯助,而是通過一個CheckPoint的機制刷新回磁盤癣漆。

在緩沖池中緩存的數(shù)據(jù)頁類型有:索引頁、數(shù)據(jù)頁剂买、undo頁惠爽、插入緩沖、自適應(yīng)哈希索引瞬哼、InnoDB存儲的鎖信息等婚肆。緩沖池實例默認為1個,不過可以通過參數(shù) innodb_buffer_pool_instances 來進行配置坐慰,多個緩沖池對根據(jù)每個頁的哈希值來平均分配较性,減少了數(shù)據(jù)庫內(nèi)部的資源競爭,增加了并發(fā)處理能力。

2.LRU List

InnoDB采用了緩沖池來存放各種類型的頁來提升數(shù)據(jù)交互的性能赞咙,但是內(nèi)存資源畢竟是有限的永毅,所以InnoDB采用了LRU算法來進行緩沖池的內(nèi)存管理(插入緩沖、自適應(yīng)哈希索引人弓、InnoDB存儲的鎖信息等頁不受LRU管理)沼死。傳統(tǒng)的LRU算法原理為:最頻繁使用的頁會在LRU列表的前端,而最少使用的頁在LRU列表的尾端崔赌,當(dāng)緩沖池不能再存放新讀取的頁時意蛀,將會首先是否LRU列表尾端的頁。

在InnoDB的緩沖池中健芭,對傳統(tǒng)的LRU算法進行了一些優(yōu)化:在傳統(tǒng)的LRU算法的基礎(chǔ)上加入了midPoint的概念县钥,即新讀取到的頁,雖然是最新訪問的頁慈迈,但是并不直接放到LRU列表的首部若贮,而是放到LRU列表的midPoint的位置(默認為LRU列表長度的5/8)。這樣可以防止某一次全表掃描操作時痒留,將大量的頁讀入緩沖池(這些頁并不是活躍的數(shù)據(jù))谴麦,導(dǎo)致內(nèi)存不足,將大量甚至全部的熱點數(shù)據(jù)都給回收掉了伸头。在midPoint之后的數(shù)據(jù)會根據(jù)是否被再次讀取或者停留一段時間后匾效,被移至midPoint之前的列表,而midPoint之前的數(shù)據(jù)也會隨著長時間未被使用或者被新的數(shù)據(jù)擠壓而被移至midPoint之后的列表恤磷。

3.redoLog緩沖

InnoDB儲存引擎首先將重做日志信息先放入到redoLog緩沖區(qū)面哼,然后會以下三種方式刷新至redoLog文件中(磁盤順序?qū)懀?/p>

? ? Master Thread按一定頻率(默認一秒一次)將redoLog緩沖刷新到redoLog文件。

? ? 當(dāng)每個事務(wù)提交時扫步。

? ? 當(dāng)redoLog緩沖池剩余空間小于二分之一時魔策。


任務(wù)模型:

InnoDB是多線程的模型,其后臺有多個不同的后臺線程河胎,負責(zé)處理不同的任務(wù)闯袒。

1.Master Thread

核心線程主要負責(zé):將緩沖池等待數(shù)據(jù)異步刷新到磁盤,保證數(shù)據(jù)的一致性仿粹、臟頁的刷新搁吓、合并插入緩沖、undo頁的回收吭历、將redolog buffer 刷新至 redolog文件中。


2.IO Thread

InnoDB使用AIO來處理寫IO請求擂橘,這樣可以極大的提高數(shù)據(jù)庫的性能晌区,而IO Thread的工作主要是負責(zé)這些IO請求的回調(diào)處理。


3.Purge Thread

當(dāng)事務(wù)被提交后,其所使用的undolog可能不再需要朗若,因此使用PurgeThread來回收已經(jīng)使用并分配undo頁恼五,用于減少Master Thread線程的壓力。


4.Page Cleaner Thread

其作用是將臟頁的刷新操作都放入單獨的線程來完成哭懈,用于減少Master Thread線程的壓力灾馒,以及緩解對用戶查詢線程的阻塞。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塞蹭,一起剝皮案震驚了整個濱河市英染,隨后出現(xiàn)的幾起案子译蒂,更是在濱河造成了極大的恐慌,老刑警劉巖容达,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異垂券,居然都是意外死亡花盐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門菇爪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來算芯,“玉大人,你說我怎么就攤上這事凳宙∫察簦” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵近速,是天一觀的道長诈嘿。 經(jīng)常有香客問我,道長削葱,這世上最難降的妖魔是什么奖亚? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮析砸,結(jié)果婚禮上昔字,老公的妹妹穿的比我還像新娘。我一直安慰自己首繁,他們只是感情好作郭,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弦疮,像睡著了一般夹攒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胁塞,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天咏尝,我揣著相機與錄音压语,去河邊找鬼。 笑死编检,一個胖子當(dāng)著我的面吹牛胎食,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播允懂,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼厕怜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蕾总?” 一聲冷哼從身側(cè)響起粥航,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谤专,沒想到半個月后躁锡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡置侍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年映之,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜡坊。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡杠输,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秕衙,到底是詐尸還是另有隱情蠢甲,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布据忘,位于F島的核電站鹦牛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勇吊。R本人自食惡果不足惜曼追,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汉规。 院中可真熱鬧礼殊,春花似錦、人聲如沸针史。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啄枕。三九已至婚陪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間射亏,已是汗流浹背近忙。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工竭业, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留智润,地道東北人及舍。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像窟绷,于是被迫代替她去往敵國和親锯玛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 存儲引擎是基于表的存在兼蜈。InnoDB把表數(shù)據(jù)放在一個黑盒里攘残,自己管理,它可以把每一個InnoDB存儲引擎的表單獨放...
    一只小星_閱讀 3,580評論 0 1
  • 1为狸、InnoDB概述 InnoDB是一個高性能歼郭、高可用、高可擴展辐棒,是MySQL 第一個完整支持ACID事務(wù)的存...
    sunshaohua520閱讀 419評論 0 0
  • 1病曾、InnoDB概述 InnoDB是一個高性能、高可用漾根、高可擴展泰涂,是MySQL 第一個完整支持ACID事務(wù)的存...
    sunshaohua閱讀 928評論 0 1
  • MySQL架構(gòu) MySQL是一個單進程多線程架構(gòu)的數(shù)據(jù)庫 存儲引擎 InnoDB存儲引擎 MySQL5.5.8之后...
    upup果閱讀 725評論 0 0
  • 1.1線程 InnoDB引擎是多線程模型,因此后臺有很多線程: Master Thread:非常核心的一個線程辐怕,主...
    cheng南舊事閱讀 732評論 0 0