您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL Redo與Undo日志是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“MySQL Redo與Undo日志是什么”文章能幫助大家解決問(wèn)題。
Redo日志是物理日志,記錄的是頁(yè)面的變化。
提升數(shù)據(jù)庫(kù)寫(xiě)入效率
保證數(shù)據(jù)庫(kù)不丟數(shù)據(jù),進(jìn)行數(shù)據(jù)恢復(fù)
所謂REDO的組織方式,就是如何把需要的REDO內(nèi)容記錄到磁盤(pán)文件中,以方便高效的REDO寫(xiě)入,讀取,恢復(fù)以及清理。我們這里把REDO從上到下分為三層:邏輯REDO層、物理REDO層和文件層。
邏輯REDO層
這一層是真正的REDO內(nèi)容,順序的數(shù)據(jù)流,REDO由多個(gè)不同Type的多個(gè)REDO記錄收尾相連組成,有全局唯一的遞增的偏移sn,InnoDB會(huì)在全局log_sys中維護(hù)當(dāng)前sn的最大值,并在每次寫(xiě)入數(shù)據(jù)時(shí)將sn增加REDO內(nèi)容長(zhǎng)度。
物理REDO層
磁盤(pán)是塊設(shè)備,InnoDB中也用Block的概念來(lái)讀寫(xiě)數(shù)據(jù),一個(gè)Block的長(zhǎng)度OS_FILE_LOG_BLOCK_SIZE等于磁盤(pán)扇區(qū)的大小512B,每次IO讀寫(xiě)的最小單位都是一個(gè)Block。
文件層
最終REDO會(huì)被寫(xiě)入到REDO日志文件中,并且日志文件是循環(huán)寫(xiě)入的
用戶(hù)線程的操作會(huì)首先寫(xiě)進(jìn)log buffer
中
log buffer
中的日志會(huì)順序?qū)懭隦edo邏輯日志中
之后會(huì)落盤(pán)持久化存儲(chǔ)到磁盤(pán)上
之后通知用戶(hù)已經(jīng)存儲(chǔ)完成了
Checkpoint是Redo日志中臟頁(yè)的標(biāo)記位,有以下兩個(gè)作用:
維護(hù)Redo日志,方便清理
減小重啟的工作量
數(shù)據(jù)庫(kù)恢復(fù)流程:
讀取 checkpoint 信息•從 checkpoint 位置開(kāi)始讀取剩余日志
解析日志并按 space_no 與 page_id 構(gòu)建 hash 表
應(yīng)用 Redo 日志,Redo日志回放保證冪等性
解析 binlog 構(gòu)建 xid 列表
掃描回滾段構(gòu)建待提交事務(wù)列表
回滾掉未在 xid 列表中的事務(wù)
Undo log是邏輯日志,記錄的是數(shù)據(jù)的增量變化,它的作用是保證事務(wù)的原子性和事務(wù)并發(fā)控制。可以用于事務(wù)回滾,以及提供多版本機(jī)制(MVCC),解決讀寫(xiě)沖突和一致性讀的問(wèn)題。
MVCC的意義:
讀寫(xiě)互不阻塞;
降低死鎖概率;
實(shí)現(xiàn)一致性讀。
UndoLog在MVCC的作用:
每個(gè)事務(wù)有一個(gè)單增的事務(wù)ID;
數(shù)據(jù)頁(yè)的行記錄中包含了DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR;
DB_ROLL_PTR將數(shù)據(jù)行的所有快照記錄都通過(guò)鏈表的結(jié)構(gòu)串聯(lián)了起來(lái)。
關(guān)于“MySQL Redo與Undo日志是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。