- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機(jī)構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機(jī)構(gòu):新網(wǎng)數(shù)碼
Undo Log
Undo Log是一種記錄數(shù)據(jù)庫操作的MySQL日志,通常以文件或表的形式存儲在數(shù)據(jù)庫中。
Undo Log主要用于:記錄事務(wù)執(zhí)行的所有數(shù)據(jù)變更,包括插入、更新和刪除操作。
Undo日志在數(shù)據(jù)庫管理系統(tǒng)中扮演著重要的角色,其作用包括以下幾個方面:
1.支持
如果事務(wù)在執(zhí)行過程中失敗或被中斷,Undo Log日志可以用于撤銷該事務(wù)的部分或全部操作,將數(shù)據(jù)庫恢復(fù)到之前的狀態(tài),以確保原子性。
2.支持多版本控制
有些數(shù)據(jù)庫系統(tǒng)支持多版本數(shù)據(jù)庫(MVCC),其中數(shù)據(jù)可以具有多個時間點的不同版本。
Undo日志用于維護(hù)這些不同版本的數(shù)據(jù),以便在需要時可以回滾到先前的數(shù)據(jù)狀態(tài)。
3.數(shù)據(jù)恢復(fù)
在數(shù)據(jù)庫發(fā)生故障或崩潰時,Undo日志可以用于恢復(fù)數(shù)據(jù)庫到一致的狀態(tài)。
4.支持事務(wù)的一致性
如果事務(wù)違反了數(shù)據(jù)庫的約束條件或完整性規(guī)則,可以使用Undo日志來回滾事務(wù),以確保數(shù)據(jù)庫的一致性。
UndoLog的原理很簡單,為了滿足事務(wù)的原子性,在操作任何數(shù)據(jù)之前,首先將數(shù)據(jù)備份到一個地方,這個存儲數(shù)據(jù)備份的地方稱為UndoLog。
同一個事務(wù)對數(shù)據(jù)進(jìn)行多次修改或者多個事務(wù)對同一個數(shù)據(jù)進(jìn)行修改,這些修改會按照時間順序連成鏈,所以通過undo log可以發(fā)現(xiàn)數(shù)據(jù)修改的歷史。
如下圖所示:
Undo日志的記錄信息:
每個Undo日志記錄通常包括以下信息:
事務(wù)ID:
執(zhí)行操作的事務(wù)。
操作類型:指示是插入、更新還是刪除操作。
舊數(shù)據(jù):如果是更新或刪除操作,記錄了被更改或刪除的數(shù)據(jù)的舊值。
新數(shù)據(jù):如果是插入或更新操作,記錄了新數(shù)據(jù)的值。
時間戳:記錄操作發(fā)生的時間。
Undo Log主要分為兩種:
1.insert undo log
代表事務(wù)在insert新記錄時產(chǎn)生的undo log,只在事務(wù)回滾時需要,并且在事務(wù)提交后可以被立即丟棄
2.update undo log
事務(wù)在進(jìn)行update或delete時產(chǎn)生的undo log,不僅在事務(wù)回滾時需要,在快照讀時也需要,所以不能隨便刪除。
只有在快照讀或事務(wù)回滾不涉及該日志時,對應(yīng)的日志才會被purge線程統(tǒng)一清除。
回滾和撤銷操作:
如果出現(xiàn)了錯誤或者用戶執(zhí)行了ROLLBACK語句,系統(tǒng)可以利用Undo Log中的備份將數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。
如果是回滾到事務(wù)開始前的狀態(tài),系統(tǒng)可以簡單地刪除或撤銷Undo日志中與該事務(wù)相關(guān)的所有記錄。
如果是回滾到事務(wù)的某一點,系統(tǒng)會撤銷Undo日志中從該點之后的所有記錄。
Undo日志可以存儲在內(nèi)存中,也可以以磁盤文件的形式存儲。
Undo日志的存儲通常包括以下方面的考慮:
1.持久性
Undo日志必須確保其數(shù)據(jù)在數(shù)據(jù)庫發(fā)生故障或崩潰時不會丟失。
因此,通常會將Undo日志的數(shù)據(jù)寫入持久性存儲介質(zhì),如磁盤,這確保了數(shù)據(jù)的持久性。
2.數(shù)據(jù)格式
Undo日志中記錄的數(shù)據(jù)通常以二進(jìn)制格式存儲,以節(jié)省空間并提高寫入和讀取性能。
數(shù)據(jù)格式需要與數(shù)據(jù)庫管理系統(tǒng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)相匹配,以便于撤銷操作和恢復(fù)數(shù)據(jù)。
3.分段存儲
Undo日志可以根據(jù)事務(wù)或數(shù)據(jù)塊進(jìn)行分段存儲,每個事務(wù)的Undo日志記錄可以存儲在單獨的Undo日志段中,以便更容易管理和維護(hù)。
這也有助于并發(fā)性能,因為不同事務(wù)的Undo日志可以并行寫入不同的段。
4.回滾指針
Undo日志中的每個記錄通常包括指向原始數(shù)據(jù)位置的指針,以便在需要回滾操作時可以快速找到并修改數(shù)據(jù)。
這些指針可以是物理指針(指向磁盤上的數(shù)據(jù)頁)或邏輯指針(指向數(shù)據(jù)行或數(shù)據(jù)塊)。
5.空間回收
由于Undo日志會隨著時間增長,數(shù)據(jù)庫管理系統(tǒng)通常需要執(zhí)行空間回收操作。
這可以包括標(biāo)記不再需要的Undo日志段以供重用,或者定期刪除舊的Undo日志數(shù)據(jù),以釋放磁盤空間。
6.日志刷寫
Undo日志中的數(shù)據(jù)通常不是實時寫入磁盤的,而是由數(shù)據(jù)庫管理系統(tǒng)控制何時將數(shù)據(jù)刷寫到磁盤。
這可以通過緩沖機(jī)制來提高性能,但需要確保在發(fā)生故障時不會丟失重要的Undo日志數(shù)據(jù)。
總的來說,Undo log日志是數(shù)據(jù)庫管理系統(tǒng)的一個關(guān)鍵組成部分,用于確保數(shù)據(jù)的一致性和可恢復(fù)性。
Undo log記錄了對數(shù)據(jù)庫的所有變更,以便在事務(wù)失敗或需要回滾時,可以撤銷這些變更,將數(shù)據(jù)庫恢復(fù)到一致的狀態(tài)。
綜上所述,Undo Log 貫穿數(shù)據(jù)庫事務(wù)處理、數(shù)據(jù)恢復(fù)等關(guān)鍵環(huán)節(jié),其完善的工作機(jī)制和存儲策略,有力地保障了數(shù)據(jù)的一致性與可恢復(fù)性,是數(shù)據(jù)庫管理系統(tǒng)穩(wěn)定運(yùn)行的核心支撐之一。想了解更多相關(guān)技術(shù)小分享可以上藍(lán)隊云官網(wǎng)查閱,更多技術(shù)問題,也可以直接咨詢。同時,藍(lán)隊云整理了運(yùn)維必備的工具包免費分享給大家使用,需要的朋友可以直接咨詢。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP