首頁  >  文章  >  資料庫  >  MySQL Redo與Undo日誌是什麼

MySQL Redo與Undo日誌是什麼

WBOY
WBOY轉載
2023-05-30 16:07:311842瀏覽

    1. Redo日誌的介紹

    Redo日誌是實體日誌,記錄的是頁面的變化。

    1.1 Redo日誌的作用

    • 提升資料庫寫入效率

    • 保證資料庫不遺失數據,進行資料復原

    1.2 Redo日誌的格式與類型

    所謂REDO的組織方式,就是如何把需要的REDO內容記錄到磁碟檔案中,以方便高效的REDO寫入,讀取,恢復以及清理。我們這裡把REDO從上到下分成三層:邏輯REDO層、物理REDO層、檔案層。

    • 邏輯REDO層

    這一層是真正的REDO內容,順序的資料流,REDO由多個不同Type的多個REDO記錄收尾相連組成,有全域唯一的遞增的偏移sn,InnoDB會在全域log_sys中維護目前sn的最大值,並在每次寫入資料時將sn增加REDO內容長度。

    • 物理REDO層

    磁碟是區塊設備,InnoDB中也用Block的概念來讀寫數據,一個Block的長度OS_FILE_LOG_BLOCK_SIZE等於磁碟區的大小512B,每次IO讀寫的最小單位都是一個Block。

    • 檔案層

    最終REDO會被寫入到REDO日誌檔案中,且日誌檔案是循環寫入的

    MySQL Redo與Undo日誌是什麼

    2. 寫入Redo日誌的流程(MTR)

    • #使用者執行緒的操作會先寫入log buffer

    • log buffer中的日誌會順序寫入Redo邏輯日誌中

    • 之後會落盤持久化儲存到磁碟上

    • 之後通知使用者已經儲存完成了

    #3. Checkpoint機制

    Checkpoint是Redo日誌中髒頁的標記位,有以下兩個作用:

    • 維護Redo日誌,方便清理

    • 減少重新啟動的工作量

    MySQL Redo與Undo日誌是什麼

    資料庫復原流程:

    • 讀取checkpoint訊息•從checkpoint 位置開始讀取剩餘日誌

    • 解析日誌並按space_no 與page_id 建立hash 表

    • ##應用Redo 日誌,Redo日誌回放保證冪等性

    • 解析binlog 建構xid 清單

    • #掃描回滾段建構待提交交易清單

    • #回滾掉未在xid 清單中的交易

    4. Undo日誌介紹

    The Undo log is a logical log that records the incremental changes of data, and its function is to ensure the atomicity of transactions and transaction concurrency control. Rewritten: The Undo log serves to guarantee the atomicity of transactions and control their concurrency by logging the incremental changes in data, functioning as a logical log.。它可以用於回滾事務,實現多版本控制(MVCC),並解決讀寫衝突和一致性讀取的問題。

    5. MVCC

    MVCC的意義:

    • 讀寫互不阻塞;

    • 降低死鎖機率;

    • 實作一致性讀取。

    UndoLog在MVCC中的作用:

    • #每個交易都有一個單增的交易ID;

    • 資料頁的行記錄包含了DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR;

    • ##DB_ROLL_PTR將資料行的所有快照記錄都透過鍊錶的結構串連了起來。
    • #

    以上是MySQL Redo與Undo日誌是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除