學習本博客之前需要儲備知識:
- MySQL體系架構
- InnoDB存盤引擎
- MySQL事務知識
文章目錄
- 1、Undo Log
- 1.1、什么是Undo log?
- 1.2、Undo log存盤方式
- 1.3、Undo log的作業原理
- 1.4、Undo log相關的變數
- 1.5、Undo log作用說明
- 附錄:參考資料
1、Undo Log
1.1、什么是Undo log?
Undo:意為撤銷或取消,undo即回傳指定某個狀態的操作
Undo日志:undo log是mysql中兩種比較重要的事務日志,另外一種是redo log,undo log顧名思義,是一種用于撤銷回退的日志,用于事務沒提交之前,會先記錄存放到 Undo 日志檔案里,當事務回滾時或者資料庫崩潰時,可以利用 Undo 日志回退事務
ps:undo log和redo log是InnoDB才支持的日志,是兩種比較重要的事務日志,在mysql存盤引擎中,InnoDB是支持事務的常用存盤引擎
1.2、Undo log存盤方式
Undo log的存盤由InnoDB存盤引擎實作,資料保存在InnoDB的資料檔案中,innodb存盤引擎對undo的管理采用段(segment)的方式,具體來說是一種命名為回滾段(rollback segment)的資料結構,
回滾段(rollback segment)中有1024個undo log segment,以前舊版本只支持1個rollback segment,也即只能存盤1024個undo log segment,MySQL5.5版本之后,能支持128個rollback segment,也即128*1024個undo log segment
1.3、Undo log的作業原理
undo log在事務開啟之前就產生,當事務提交的時候,不會洗掉undo log,因為可能需要rollback操作,要執行回滾(rollback)操作時,從快取中讀取資料,InnoDB會將事務對應的日志保存在洗掉list中,后臺通過purge執行緒進行回收處理
ok,還是以一條sql執行update、select程序,畫圖表示,圖例是自己所畫,圖例模仿網上課程ppt,如圖:
執行update操作,事務A提交時候(事務還沒提交),會將資料進行備份,備份到對應的undo buffer,Undo Log保存了未提交之前的操作日志,User表資料肯定就是持久保存到InnoDB的資料檔案IBD,默認情況,
這時事務B進行查詢操作,是直接讀undo buffer快取的,這時事務A還沒提交事務,要回滾(rollback),是不讀磁盤的,先直接從undo buffer快取讀取

ps:undo日志屬于邏輯日志,redo是物理日志,所謂邏輯日志是undo log是記錄一個操作程序,不會物理洗掉undo log,sql執行delete或者update操作都會記錄一條undo日志
1.4、Undo log相關的變數
musql -u root -p,登錄mysql客戶端,查詢undo相關引數:(基于Mysql8版本)

- innodb_undo_directory:定義存盤的目錄路徑,默認值
./,表示datadir
datadir引數可以通過設定my.ini組態檔:
[mysql]
# 設定mysql資料庫的資料的存放目錄
datadir="D:\mysql-8.0.13-winx64\data"
- innodb_undo_log_truncate:引數設定為1,即開啟在線回收(收縮)undo log日志檔案,支持動態設定,默認是關閉的
- innodb_undo_logs:這個引數是指前面介紹的rollback segment的數量,Mysql5.5版本之后默認設定為128
- innodb_undo_tablespaces:該變數默認值為0,表示undo log全部寫入一個表空間檔案,可以設定這個變數,平均分配到多少個檔案中
1.5、Undo log作用說明
- 實作事務的原子性
undo log可以用于實作事務的原子性, 如果事務處理程序出現一些特殊情況,比如sql錯誤等等情況,就要執行回滾(rollback)操作,mysql就可以利用undo log將資料恢復到事務開始之前
- 實作多版本并發控制(MVCC)
Undo Log 在 MySQL InnoDB 存盤引擎中用來實作多版本并發控制,事務沒提交之前,undo日志可以作為高并發情況下,其它并發事務進行快照讀
附錄:參考資料
https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html
CSDN認證博客專家
分布式
Java
Spring
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/175883.html
標籤:其他
上一篇:SQL相關指令整理
