InnoDB原子性和持久性

InnoDB原子性和持久性

  • 數(shù)據(jù)庫的原子性包括兩個內(nèi)容:災(zāi)難恢復(fù)和事務(wù)回滾。InnoDB通過redo日志來支持災(zāi)難恢復(fù)滑燃,通過undo日志來支持事務(wù)回滾示辈。
  • 數(shù)據(jù)庫的持久性指事務(wù)一旦commit就會被持久化:通過在commit時同步寫入數(shù)據(jù)庫來支持。

redo日志:實(shí)現(xiàn)災(zāi)難恢復(fù)

InnoDBRedo
  • 為了更好的進(jìn)行持久化展哭,innodb使用WAL方式進(jìn)行持久化匪蟀,WAL通過將對數(shù)據(jù)的變更以追加的形式寫入日志椎麦,并且在之后將變更日志應(yīng)用到數(shù)據(jù)上,來將隨機(jī)IO盡可能地轉(zhuǎn)化為批量IO材彪,在innodb中观挎,這個叫做redo日志。
  • 另外查刻,為了增加頻繁申請WALBuffer键兜,一般都會預(yù)設(shè)一個環(huán)形內(nèi)存Buffer區(qū)進(jìn)行重用凤类,在innodb中穗泵,這個叫做redo log buffer。
  • innodb存在兩種類型的redo日志:物理日志直接記錄對頁的修改谜疤,而邏輯日志則記錄邏輯操作佃延,為了保證redo日志的冪等性,意味著夷磕,對于同樣狀態(tài)的物理頁履肃,應(yīng)用邏輯日志或者物理日志后生成的頁面數(shù)據(jù)應(yīng)該是一樣的。
  • 在用戶線程中坐桩,一個事務(wù)包含多個語句尺棋,每個語句包含多個MTR,一個MTR是對底層頁面的一次完整訪問绵跷,由多個Redo日志組成膘螟;每次向redo log buffer寫入的基本粒度是一個MTR,這也是InnoDB引擎支持的最小并發(fā)粒度碾局;redo log被劃分為很多block荆残,每個block的大小為512字節(jié),等于一個扇區(qū)的大芯坏薄内斯;在commit或者其它時機(jī)蕴潦,redo log被刷入磁盤。
  • lsn為內(nèi)存緩沖區(qū)已寫入的字節(jié)數(shù)俘闯,flushed_lsn為已刷新到磁盤的字節(jié)數(shù)潭苞,ckpt_lsn為已經(jīng)應(yīng)用到磁盤數(shù)據(jù)上的字節(jié)數(shù)。
  • ckpt_lsn是通過FlushList進(jìn)行更新真朗,F(xiàn)lushList按page修改的最小的lsn進(jìn)行排序萄传,每當(dāng)隊尾page刷新到磁盤上時,ckpt_lsn都進(jìn)行更新蜜猾。
  • 崩潰恢復(fù):通過ckpt_lsn秀菱,可以確定崩潰恢復(fù)的起點(diǎn),通過依次讀取redolog直到一個不足512字節(jié)的block蹭睡,則為崩潰恢復(fù)的終點(diǎn)衍菱,之后只要重新應(yīng)用redolog到磁盤數(shù)據(jù)即可。通過比較page的FIL_PAGE_LSN和將對同一個page的redo日志行為進(jìn)行劃分合并肩豁,可以減少恢復(fù)的時間脊串。

undo日志:回滾和MVCC

INNODBUndo
  • B+樹索引數(shù)據(jù)中通過roll_pointer指向undo日志,uodate和delete類型的日志還有roll_pointer清钥,指向更早的undo日志琼锋,從而形成版本鏈,索引數(shù)據(jù)和undo日志中的trx_id用來實(shí)現(xiàn)不同的隔離級別祟昭,兩者結(jié)合缕坎,實(shí)現(xiàn)支持不同隔離級別的MVCC。
  • 所有的undo日志都保存在undo日志段中篡悟,共有128個日志段谜叹,每個段中有1024個undo日志鏈,通過Page5中搬葬,可以找到128個undo日志段描述頁荷腊,通過undo日志段描述頁中的undoslots,可以找到1024個日志鏈急凰,每個日志鏈中包含多個undo日志頁女仰,以鏈表形式連接起來,第一個undo日志頁中不僅記錄undo日志抡锈,還記錄有undo日志鏈信息疾忍。
  • 每個事務(wù)最多會使用4個日志鏈:普通表insert undo鏈;臨時表update undo鏈企孩;普通表insert undo鏈锭碳;臨時表update undo鏈。劃分四個不同類型的鏈的原因是:臨時表不需要寫redo日志勿璃,insert日志在事務(wù)提交后可直接釋放推汽,而update日志在事務(wù)提交后因需要支持MVCC不能直接釋放而需要等待purge線程清理后再釋放。
  • 日志鏈滿足僅包含一個undo日志且使用量少于3/4時在事務(wù)提交后可以被重用歧沪,重用時歹撒,對于insert日志直接覆蓋寫,對于uodate日志诊胞,則通過使用UndoLogHeader中的nextLog和prevLog繼續(xù)增加新的Undo鏈信息追加寫暖夭。
  • 為事務(wù)分配undo日志鏈的過程:
    • 以輪轉(zhuǎn)方式從128個日志段中分配日志段
    • 如果分配到的日志段中有可重用的日志鏈,則重用
    • 若無撵孤,則以輪轉(zhuǎn)方式從1024個日志鏈中分配日志鏈
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迈着,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邪码,更是在濱河造成了極大的恐慌裕菠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闭专,死亡現(xiàn)場離奇詭異奴潘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)影钉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門画髓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人平委,你說我怎么就攤上這事奈虾。” “怎么了肆汹?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵愚墓,是天一觀的道長。 經(jīng)常有香客問我昂勉,道長,這世上最難降的妖魔是什么扫腺? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任岗照,我火速辦了婚禮,結(jié)果婚禮上笆环,老公的妹妹穿的比我還像新娘攒至。我一直安慰自己,他們只是感情好躁劣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布迫吐。 她就那樣靜靜地躺著,像睡著了一般账忘。 火紅的嫁衣襯著肌膚如雪志膀。 梳的紋絲不亂的頭發(fā)上熙宇,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音溉浙,去河邊找鬼烫止。 笑死,一個胖子當(dāng)著我的面吹牛戳稽,可吹牛的內(nèi)容都是我干的馆蠕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼惊奇,長吁一口氣:“原來是場噩夢啊……” “哼互躬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颂郎,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吨铸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祖秒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诞吱,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年竭缝,在試婚紗的時候發(fā)現(xiàn)自己被綠了房维。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡抬纸,死狀恐怖咙俩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情湿故,我是刑警寧澤阿趁,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站坛猪,受9級特大地震影響脖阵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墅茉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一欢际、第九天 我趴在偏房一處隱蔽的房頂上張望觅玻。 院中可真熱鬧喷斋,春花似錦庸推、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绷旗,卻和暖如春喜鼓,著一層夾襖步出監(jiān)牢的瞬間副砍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工颠通, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留址晕,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓顿锰,卻偏偏與公主長得像谨垃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硼控,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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