接上篇,官網地址
一、簡介
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