天天看點

undo log

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          |
+--------------------------+------------+