天天看点

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