根據行為的不同,undo log分為兩種:insert undo log和update undo log
1、insert undo log,是在insert操作中產生的。insert操作的記錄只對事務本身可見。
對於其它事務此記錄是不可見的,所以 insert undo log 可以在事務提交後直接刪除而不需要進行purge操作。
2、update undo log是update或delete操作中產生。
因為會對已經存在的記錄產生影響,為了提供 MVCC機制,因此 update undo log 不能在事務提交時就進行刪除,而是將事務提交時放到入 history list 上,等待 purge 線程進行最後的刪除操作
為了更好的支持併發,InnoDB的多版本一致性讀是採用了基於回滾段的的方式。另外,對於更新和刪除操作,InnoDB並不是真正的刪除原來的記錄,而是設置記錄的delete mark為1。因此為了解決數據Page和Undo Log膨脹的問題,需要引入purge機制進行回收
為了保證事務併發操作時,在寫各自的undo log時不產生衝突,InnoDB採用回滾段的方式來維護undo log的併發寫入和持久化。回滾段實際上是一種 Undo 文件組織方式
以上就是mysql中undo log的兩種類型.