UNDO日誌

undo log記錄的內容是邏輯的(基於每條記錄),redo log記錄的是物理的(基於page),rollback是邏輯上的回滾併發

innodb_undo_tablespaces    5.6能夠將undo設爲多個表空間
innodb_undo_logs           能夠設置有多少個undo,默認128,5.7是96,前面32個留給臨時表(ibtmp1),其實也無所謂,一般用不到

Ⅰ、UNDO對象

從底層來看很是複雜mvc

對象 說明
rollback segment 回滾段
undo log segment undo undo日誌段
undo page 組成了undo日誌段
undo log 存在於undo page中
undo log record 存在於undo log中

上面這個太底層,這裏只分析回滾段和undo log內容,其餘本身看書spa

1.1 rollback segment(回滾段)

  • 5.5以前只有1個rollback segment
  • 5.5以後有128個
  • 不保存任何undo log,只保存undo log segment的位置
  • 含有1024個undo slot
Rollback               undo log
   Segment                segment
+-----------+            +---------+            +------+
| segment 1 |            |    1    +------------> undo |
+-----------+            +---------+            +------+
| segment 2 +------------>    2    |
+-----------+            +---------+
| segment 3 |            |   ...   |
+-----------+            +---------+            +------+
|           |            |  1024   +------------> undo |
|     .     |            +---------+            +------+
|     .     |
|     .     |
|           |
+-----------+
| segment127|
+-----------+
| segment128|
+-----------+
5.5只有一個rollback segment,即只有1024個undo log segment,就表示只能有1024個併發事務(線程)去執行undo
若是用不到undo,其實能夠超過1024個線程
在5.6中支持128*1024個併發執行undo線程

1.2 undo log的保存

undo默認保存在ibdata,即系統表空間中線程

再回顧下,ibdata1中有哪些東西?日誌

double Write
元數據信息(數據字典)
undo信息(5.6後可分離),分開放可避免競爭
  innodb_undo_directory
  innodb_undo_logs
  innodb_undo_tablespaces
  insert buffer/change buffer

在MySQL5.7之後,Rollback Segment從128個小到96個,剩餘的32個rollback segment預留給臨時表空間(ibtmp1)使用

1.3 undo log的內容

  • undo log header
  • undo log records(兩種)code

    一、insert undo log record 記錄insert對象

    二、update undo log record, 記錄update和delete(trx_undo_upd_exist_rec,trx_undo_del_mark_rec,trx_undo_upd_del_rec)blog

undo是邏輯日誌,記錄了每一行修改的值(先後項)事務

以前說的redo寫prepare,就是把上圖中紅色框框部分修改成prepare狀態(redo記錄頁的變化,undo也是一種頁)ip

tips;

  • 一個undo log是由不少undo log record組成,由於一個undo包含不少記錄
  • insert和update兩種undo處理方式不同,存放在不一樣段裏面,是由於undo的回收對於insert操做,只要被插入了就能夠被回收,而update操做,即便事物提交了,這個undo也不能立刻被回收(mvcc詳見下節分析)
相關文章
相關標籤/搜索