溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MySQL?Redo與Undo日志是什么

發(fā)布時(shí)間:2022-08-01 11:12:14 來(lái)源:億速云 閱讀:137 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“MySQL Redo與Undo日志是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“MySQL Redo與Undo日志是什么”文章能幫助大家解決問(wèn)題。

    1. Redo日志的介紹

    Redo日志是物理日志,記錄的是頁(yè)面的變化。

    1.1 Redo日志的作用

    • 提升數(shù)據(jù)庫(kù)寫(xiě)入效率

    • 保證數(shù)據(jù)庫(kù)不丟數(shù)據(jù),進(jìn)行數(shù)據(jù)恢復(fù)

    1.2 Redo日志的格式與類(lèi)型

    所謂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ě)入的

    MySQL?Redo與Undo日志是什么

    2. 寫(xiě)入Redo日志的流程(MTR)

    • 用戶(hù)線程的操作會(huì)首先寫(xiě)進(jìn)log buffer

    • log buffer中的日志會(huì)順序?qū)懭隦edo邏輯日志中

    • 之后會(huì)落盤(pán)持久化存儲(chǔ)到磁盤(pán)上

    • 之后通知用戶(hù)已經(jīng)存儲(chǔ)完成了

    3. Checkpoint機(jī)制

    Checkpoint是Redo日志中臟頁(yè)的標(biāo)記位,有以下兩個(gè)作用:

    • 維護(hù)Redo日志,方便清理

    • 減小重啟的工作量

    MySQL?Redo與Undo日志是什么

    數(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ù)

    4. Undo日志介紹

    Undo log是邏輯日志,記錄的是數(shù)據(jù)的增量變化,它的作用是保證事務(wù)的原子性和事務(wù)并發(fā)控制。可以用于事務(wù)回滾,以及提供多版本機(jī)制(MVCC),解決讀寫(xiě)沖突和一致性讀的問(wèn)題。

    5. MVCC

    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)。

    向AI問(wèn)一下細(xì)節(jié)

    免責(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)容。

    AI