MySQL系列之事務日誌Undo log學習筆記

學習本博客之前需要儲備知識:

  • MySQL體系架構
  • InnoDB存儲引擎
  • MySQL事務知識

@[toc]

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緩存讀取
[圖片上傳失敗...(image-38b799-1640159204618)]

ps:undo日誌屬於邏輯日誌,redo是物理日誌,所謂邏輯日誌是undo log是記錄一個操作過程,不會物理刪除undo log,sql執行delete或者update操作都會記錄一條undo日誌

1.4、Undo log相關的變量

musql -u root -p,登錄mysql客戶端,查詢undo相關參數:(基於Mysql8版本)
[圖片上傳失敗...(image-4dcae3-1640159204618)]

  • 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日誌可以作爲高併發情況下,其它併發事務進行快照讀

關於Redo log的可以參考我博客MySQL系列之事務日誌redo log學習筆記

附錄:參考資料

https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章