undolog實(shí)現(xiàn)事務(wù)原子性,redolog實(shí)現(xiàn)事務(wù)的持久性

undolog可以實(shí)現(xiàn)事務(wù)的原子性谨湘,還可以用來(lái)實(shí)現(xiàn)MVCC绽快。其原理是,(開啟事務(wù)后)在操作任何數(shù)據(jù)前紧阔,先將原數(shù)據(jù)備份到undolog坊罢,然后對(duì)數(shù)據(jù)進(jìn)行修改,如果此過(guò)程中出現(xiàn)異常擅耽,或執(zhí)行了rollback語(yǔ)句活孩,可利用undolog中備份的數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。

假設(shè)有A乖仇、B兩個(gè)數(shù)據(jù)憾儒,值分別為1,2。 進(jìn)行+2的事務(wù)操作这敬。

A.事務(wù)開始.

B.記錄A=1到undo log.

C.修改A=3.

D.記錄B=2到undo log.

E.修改B=4.

F.將undo log寫到磁盤航夺。

G.將數(shù)據(jù)寫到磁盤蕉朵。

H.事務(wù)提交

對(duì)于數(shù)據(jù)的操作崔涂,都是先讀到內(nèi)存中,然后在內(nèi)存中修改始衅,最后將數(shù)據(jù)寫到磁盤冷蚂。

之所以能保證原子性,是因?yàn)椋?/p>

A. 更新數(shù)據(jù)前記錄Undo log汛闸。

B. 為了保證持久性蝙茶,必須將數(shù)據(jù)在事務(wù)提交前寫到磁盤。只要事務(wù)成功提交诸老,數(shù)據(jù)必然已經(jīng)持久化隆夯。

C. Undo log必須先于數(shù)據(jù)持久化到磁盤。如果在G,H之間系統(tǒng)崩潰,undo log是完整的,可以用來(lái)回滾事務(wù)蹄衷。

D. 如果在A-F之間系統(tǒng)崩潰,因?yàn)閿?shù)據(jù)沒(méi)有持久化到磁盤忧额。所以磁盤上的數(shù)據(jù)還是保持在事務(wù)開始前的狀態(tài)。

缺點(diǎn):每個(gè)事務(wù)提交前將數(shù)據(jù)和Undo Log寫入磁盤愧口,這樣會(huì)導(dǎo)致大量的磁盤IO睦番,因此性能很低。

所以耍属,為了提升性能托嚣,可以在寫數(shù)據(jù)到磁盤前,先寫redolog厚骗,這就是wal預(yù)寫日志機(jī)制示启,這樣先寫redolog日志,數(shù)據(jù)只需先寫到內(nèi)存溯捆,因?yàn)閞edolog是順序?qū)懗笊Γ鴶?shù)據(jù)落盤則是隨機(jī)寫,要慢得多提揍。 這樣啤月,當(dāng)系統(tǒng)崩潰時(shí),雖然數(shù)據(jù)沒(méi)有持久化劳跃,但有redolog撐著谎仲,數(shù)據(jù)也不會(huì)丟。(innodb_flush_log_at_trx_commit? 這個(gè)參數(shù)設(shè)置為2時(shí)刨仑,那么redolog每次不需落盤郑诺,而是寫到os cache中(一定時(shí)間后再flush到磁盤),這樣性能又大大提升杉武,只要操作系統(tǒng)不宕辙诞,即便mysql宕了,數(shù)據(jù)也不會(huì)丟)

Undo + Redo事務(wù)的簡(jiǎn)化過(guò)程

A.事務(wù)開始.

B.記錄A=1到undo log.

C.修改A=3.

D.記錄A=3到redo log.

E.記錄B=2到undo log.

F.修改B=4.

G.記錄B=4到redo log.

H.將redo log寫入磁盤轻抱。

I.事務(wù)提交

通過(guò)undo保證事務(wù)的原子性飞涂,redo保證持久性。

轉(zhuǎn)載自:https://blog.csdn.net/shaolong1013/article/details/98462242

但是F硭选=系辍!基于以上的過(guò)程容燕,mysql一個(gè)事務(wù)操作依舊十分繁瑣梁呈,這也就是其在并發(fā)場(chǎng)景下需借助于nosql來(lái)提升性能


redolog和undolog屬于innodb,而在mysql的server層還有一個(gè)binlog蘸秘,其作用是誤操作后需要靠它來(lái)恢復(fù)數(shù)據(jù)以及主從復(fù)制官卡, mysql在update一行數(shù)據(jù)的時(shí)候:

1.執(zhí)行器先找引擎取id=n這一行蝗茁,id是主鍵,引擎直接用樹搜索到這一行

2.執(zhí)行器拿到引擎給的行數(shù)據(jù)寻咒,把這個(gè)值加1评甜,得到新的一行數(shù)據(jù),再調(diào)用引擎接口寫入這行新數(shù)據(jù)

3.引擎將這行數(shù)據(jù)更新到內(nèi)存中仔涩,同時(shí)將這個(gè)更新操作記錄到redolog中忍坷,此時(shí)redolog處于prepare狀態(tài),然后告知執(zhí)行器執(zhí)行完成熔脂,隨時(shí)可以提交事務(wù)

4.執(zhí)行器生成這個(gè)操作的binlig佩研,并寫入磁盤

5.執(zhí)行器調(diào)用引擎的提交事務(wù)接口,引擎吧剛剛寫入的redolog改成提交(commit)狀態(tài)霞揉,更新完成

將redolog的寫入拆成兩個(gè)步驟旬薯,prepare和commit,這就是兩階段提交适秩,其目的是為了讓兩份日志(redolog和binlog)之間的邏輯一致

這兩個(gè)日志有三點(diǎn)不同:

1.redolog是innodb特有绊序,binlog是mysql server層實(shí)現(xiàn)的,所有引擎都可以使用秽荞,

2.redolog是物理日志骤公,記錄的是在某個(gè)數(shù)據(jù)頁(yè)上做了什么修改,binlog是邏輯日志扬跋,記錄的是這個(gè)語(yǔ)句的原始邏輯阶捆,

3.redolog是循環(huán)寫的,空間固定會(huì)用完钦听,binlog是可以追加寫入的洒试,追加寫是指binlog文件寫到一定大小后會(huì)切換到下一個(gè),并不會(huì)覆蓋以前的日志朴上。

redolog和binlog互相是不可替代的垒棋,redolog的作用是提升數(shù)據(jù)寫入時(shí)的性能,并保證事務(wù)的持久化特性痪宰,以及崩潰恢復(fù)的能力叼架,而binlog 是無(wú)法支持崩潰恢復(fù),因?yàn)樗鼪](méi)有能力恢復(fù)“數(shù)據(jù)頁(yè)”酵镜。? 而binlog也有著redolog無(wú)法替代的功能碉碉,一個(gè)是歸檔柴钻。redo log 是循環(huán)寫淮韭,寫到末尾是要回到開頭繼續(xù)寫的。這樣歷史日志沒(méi)法保留贴届,redolog 也就起不到歸檔的作用靠粪。還有很多公司有異構(gòu)系統(tǒng)中使用到的組件(比如es蜡吧,redis等),這些系統(tǒng)就靠消費(fèi) MySQL 的 binlog 來(lái)更新自己的數(shù)據(jù)占键。關(guān)掉 binlog 的話昔善,這些下游系統(tǒng)就沒(méi)法輸入了∨弦遥總之君仆,由于現(xiàn)在包括 MySQL 高可用在內(nèi)的很多系統(tǒng)機(jī)制都依賴于 binlog,所以“鳩占鵲巢”redo log 還做不到牲距。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末返咱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牍鞠,更是在濱河造成了極大的恐慌咖摹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难述,死亡現(xiàn)場(chǎng)離奇詭異萤晴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)胁后,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門店读,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人攀芯,你說(shuō)我怎么就攤上這事两入。” “怎么了敲才?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵裹纳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我紧武,道長(zhǎng)剃氧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任阻星,我火速辦了婚禮朋鞍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妥箕。我一直安慰自己滥酥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布畦幢。 她就那樣靜靜地躺著坎吻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宇葱。 梳的紋絲不亂的頭發(fā)上瘦真,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天刊头,我揣著相機(jī)與錄音,去河邊找鬼诸尽。 笑死原杂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的您机。 我是一名探鬼主播穿肄,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼际看!你這毒婦竟也來(lái)了被碗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仿村,失蹤者是張志新(化名)和其女友劉穎锐朴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔼囊,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焚志,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畏鼓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酱酬。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖云矫,靈堂內(nèi)的尸體忽然破棺而出膳沽,到底是詐尸還是另有隱情,我是刑警寧澤让禀,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布挑社,位于F島的核電站,受9級(jí)特大地震影響巡揍,放射性物質(zhì)發(fā)生泄漏痛阻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一腮敌、第九天 我趴在偏房一處隱蔽的房頂上張望阱当。 院中可真熱鬧,春花似錦糜工、人聲如沸弊添。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)油坝。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間免钻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工崔拥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留极舔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓纪挎,卻偏偏與公主長(zhǎng)得像搪花,于是被迫代替她去往敵國(guó)和親缝驳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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