暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL回滚日志

数据库BOSS 2021-04-16
289

1.作用

  1. 提供回滚
  2. 多个行版本控制(MVCC)

2.内容

undo log是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。

  • delete操作实际上不会直接删除,而是将delete对象打上delete flag,标记为删除,最终的删除操作是purge线程完成的。
  • update分为两种情况:update的列是否是主键列。如果不是主键列,在undo log中直接反向记录是如何update的,即update是直接进行的。如果是主键列,update分两部执行:先删除该行,再插入一行目标行。

3.参数

mysql> show variables like '%undo%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| innodb_max_undo_log_size | 2147483648 |
| innodb_undo_directory    | ./         |
| innodb_undo_log_truncate | ON         |
| innodb_undo_logs         | 128        |
| innodb_undo_tablespaces  | 3          |
+--------------------------+------------+

MySQL5.6之后,undo表空间可以配置成独立的文件,但是提前需要在配置文件中配置,完成数据库初始化后生效且不可改变undo log文件的个数

如果初始化数据库之前没有进行相关配置,那么就无法配置成独立的表空间了。

  • innodb_undo_directory :独立表空间的存放目录
  • innodb_undo_logs:回滚段为128KB
  • innodb_undo_tablespaces:undo log文件数目

默认情况下undo文件是保持在共享表空间的,也即ibdatafile文件中,当数据库中发生一些大的事务性操作的时候,要生成大量的undo信息,全部保存在共享表空间中的,建议建立独立undo 表空间。


文章转载自数据库BOSS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论