InnoDB文件筆記(三)—— Undo Log

TheheiWorld發表於2019-04-12

接上篇,官網地址

一、簡介

Undo Log是一組因讀寫事務產生的Undo log records 的集合,是資料的修改記錄,是邏輯日誌。

Undo Logs由undo log segments組成,包含rollback segments。InnoDB最大支援128個rollback segment,其中32分配給臨時表空間,96個分配給常規表的事務資料修改,innodb_undo_logs控制rollback segment的數量。undo segment位於共享表空間內。

Undo Log用於事務的rollback,以及支援MVCC

二、Undo Slot

rollback segment所支援的事務數取決於undo slot的數量以及每個事務所需的undo logs數量。

number of undo slots in a rollback segment = innodb page size / 16

三、Undo Log 儲存

基於段 rollback segment儲存,每個rollback segment記錄1024個undo log segment。基於這樣,支援線上事務限制為128*1024。

事務在undo log segment分配頁並寫入undo log的這個過程同樣需要寫入redo log。

當事務提交時,InnoDB儲存引擎會做:

  • 將undo log放入列表中,以供之後的purge操作。
  • 判斷undo log所在的頁是否可以重用,若可以分配給下個事務使用。事務提交時,將undo log放入一個連結串列中,是否可以最終刪除有purge執行緒判斷。

四、Undo Log 格式

  • insert undo log

    在事務提交後可以直接刪除,因為insert只有本身事務可見。

  • update undo log
    InnoDB文件筆記(三)—— Undo Log

相關文章