歡迎來到天天文庫
瀏覽記錄
ID:8966370
大?。?11.50 KB
頁數(shù):14頁
時間:2018-04-13
《mysql數(shù)據(jù)庫innodb存儲引擎log漫游》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、00–UndoLogUndoLog是為了實(shí)現(xiàn)事務(wù)的原子性,在MySQL數(shù)據(jù)庫InnoDB存儲引擎中,還用UndoLog來實(shí)現(xiàn)多版本并發(fā)控制(簡稱:MVCC)。-事務(wù)的原子性(Atomicity)??事務(wù)中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在執(zhí)行的過程中發(fā)生??了錯誤,要回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過。-原理?UndoLog的原理很簡單,為了滿足事務(wù)的原子性,在操作任何數(shù)據(jù)之前,首先將數(shù)據(jù)備份到一個地方?(這個存儲數(shù)據(jù)備份的地方
2、稱為UndoLog)。然后進(jìn)行數(shù)據(jù)的修改。如果出現(xiàn)了錯誤或者用戶執(zhí)行了?ROLLBACK語句,系統(tǒng)可以利用UndoLog中的備份將數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。除了可以保證事務(wù)的原子性,UndoLog也可以用來輔助完成事務(wù)的持久化。-事務(wù)的持久性(Durability)?事務(wù)一旦完成,該事務(wù)對數(shù)據(jù)庫所做的所有修改都會持久的保存到數(shù)據(jù)庫中。為了保證持久性,數(shù)據(jù)庫?系統(tǒng)會將修改后的數(shù)據(jù)完全的記錄到持久的存儲上。-用UndoLog實(shí)現(xiàn)原子性和持久化的事務(wù)的簡化過程?假設(shè)有A、B兩個數(shù)據(jù),值分別為1,2。
3、?A.事務(wù)開始.?B.記錄A=1到undolog.?C.修改A=3.?D.記錄B=2到undolog.?E.修改B=4.?F.將undolog寫到磁盤。?G.將數(shù)據(jù)寫到磁盤。?H.事務(wù)提交?這里有一個隱含的前提條件:‘?dāng)?shù)據(jù)都是先讀到內(nèi)存中,然后修改內(nèi)存中的數(shù)據(jù),最后將數(shù)據(jù)寫回磁盤’。?之所以能同時保證原子性和持久化,是因?yàn)橐韵绿攸c(diǎn):?A.更新數(shù)據(jù)前記錄Undolog。?B.為了保證持久性,必須將數(shù)據(jù)在事務(wù)提交前寫到磁盤。只要事務(wù)成功提交,數(shù)據(jù)必然已經(jīng)持久化。?C.Undolog必須先于數(shù)據(jù)持久化到
4、磁盤。如果在G,H之間系統(tǒng)崩潰,undolog是完整的,???可以用來回滾事務(wù)。?D.如果在A-F之間系統(tǒng)崩潰,因?yàn)閿?shù)據(jù)沒有持久化到磁盤。所以磁盤上的數(shù)據(jù)還是保持在事務(wù)開始前的狀態(tài)。缺陷:每個事務(wù)提交前將數(shù)據(jù)和UndoLog寫入磁盤,這樣會導(dǎo)致大量的磁盤IO,因此性能很低。如果能夠?qū)?shù)據(jù)緩存一段時間,就能減少IO提高性能。但是這樣就會喪失事務(wù)的持久性。因此引入了另外一種機(jī)制來實(shí)現(xiàn)持久化,即RedoLog.01–RedoLog-原理?和UndoLog相反,RedoLog記錄的是新數(shù)據(jù)的備份。在事務(wù)提
5、交前,只要將RedoLog持久化即可,?不需要將數(shù)據(jù)持久化。當(dāng)系統(tǒng)崩潰時,雖然數(shù)據(jù)沒有持久化,但是RedoLog已經(jīng)持久化。系統(tǒng)可以根據(jù)?RedoLog的內(nèi)容,將所有數(shù)據(jù)恢復(fù)到最新的狀態(tài)。-Undo+Redo事務(wù)的簡化過程?假設(shè)有A、B兩個數(shù)據(jù),值分別為1,2.?A.事務(wù)開始.?B.記錄A=1到undolog.?C.修改A=3.?D.記錄A=3到redolog.?E.記錄B=2到undolog.?F.修改B=4.?G.記錄B=4到redolog.?H.將redolog寫入磁盤。?I.事務(wù)提交-Un
6、do+Redo事務(wù)的特點(diǎn)?A.為了保證持久性,必須在事務(wù)提交前將RedoLog持久化。?B.數(shù)據(jù)不需要在事務(wù)提交前寫入磁盤,而是緩存在內(nèi)存中。?C.RedoLog保證事務(wù)的持久性。?D.UndoLog保證事務(wù)的原子性。?E.有一個隱含的特點(diǎn),數(shù)據(jù)必須要晚于redolog寫入持久存儲。-IO性能?Undo+Redo的設(shè)計(jì)主要考慮的是提升IO性能。雖說通過緩存數(shù)據(jù),減少了寫數(shù)據(jù)的IO.?但是卻引入了新的IO,即寫RedoLog的IO。如果RedoLog的IO性能不好,就不能起到提高性能的目的。?為了保
7、證RedoLog能夠有比較好的IO性能,InnoDB的RedoLog的設(shè)計(jì)有以下幾個特點(diǎn):?A.盡量保持RedoLog存儲在一段連續(xù)的空間上。因此在系統(tǒng)第一次啟動時就會將日志文件的空間完全分配。???以順序追加的方式記錄RedoLog,通過順序IO來改善性能。?B.批量寫入日志。日志并不是直接寫入文件,而是先寫入redologbuffer.當(dāng)需要將日志刷新到磁盤時???(如事務(wù)提交),將許多日志一起寫入磁盤.?C.并發(fā)的事務(wù)共享RedoLog的存儲空間,它們的RedoLog按語句的執(zhí)行順序,依次交
8、替的記錄在一起,???以減少日志占用的空間。例如,RedoLog中的記錄內(nèi)容可能是這樣的:???記錄1:???記錄2:???記錄3:???記錄4:???記錄5:?D.因?yàn)镃的原因,當(dāng)一個事務(wù)將RedoLog寫入磁盤時,也會將其他未提交的事務(wù)的日志寫入磁盤。?E.RedoLog上只進(jìn)行順序追加的操作,當(dāng)一個事務(wù)需要回滾時,它的RedoLog記錄也
此文檔下載收益歸作者所有