1、undo log 的作用簡述
資料庫事務四大特性中有一個是 原子性 ,具體來說就是 原子性是指對資料庫的一系列操作,要麼全部成功,要麼全部失敗,不可能出現部分成功的情況。
實際上, 原子性 底層就是通過
undo log
實作的。 undo log
主要記錄了資料的邏輯變化,比如一條 INSERT
語句,對應一條 DELETE
的 undo log
,對于每個 UPDATE
語句,對應一條相反的 UPDATE
undo log
,這樣在發生錯誤時,就能復原到事務之前的資料狀态。
同時,
undo log
也是 MVCC
(多版本并發控制)實作的關鍵。
2、相關參數
5.6版本,ibdata1 與共享臨時表空間共用
mysql> show variables like '%undo%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| innodb_undo_directory | . |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 0 |
+-------------------------+-------+
5.7版本,可以将臨時表空間ibtmp1和undo log分開獨立出來
mysql> show variables like '%undo%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| innodb_max_undo_log_size | 1073741824 |
| innodb_undo_directory | ./ |
| innodb_undo_log_truncate | OFF |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 0 |
+--------------------------+------------+
8.0版本
mysql> show variables like '%undo%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| innodb_max_undo_log_size | 1073741824 |
| innodb_undo_directory | ./ |
| innodb_undo_log_encrypt | OFF |
| innodb_undo_log_truncate | ON |
| innodb_undo_tablespaces | 2 |
+--------------------------+------------+