MySQL架构原理之存储引擎InnoDB_Undo Log
2022/2/19 19:15:40
本文主要是介绍MySQL架构原理之存储引擎InnoDB_Undo Log,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Undo:意为撤销或取消,以撤销操作为目的,返回某个指定状态的操作。
Undo Log:数据库事务开始之前会将要修改的记录存放到Undo日志里,当事务回滚时或者数据库崩溃时可以利用Undo日志撤销为提交事务对数据库产生的影响。
Undo Log产生和销毁:Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log, innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。
Undo Log 属于逻辑日志,记录一个辨别过程。例如执行一个delete,undolog会记录一个insert;执行一个update,undolog会记录一个相反的update。
Undo Log存储:undo log采用段的方式管理和记录。在innodb数据文件中包含一种rollback segment回滚段,内部包含1024个undo log segment。可以通过下面一组参数来控制Undo log存储:
show variables like '%innodb_undo%';
以上对Undo Log进行了基本的介绍,下面介绍它为何存在,解决什么问题——即它的作用:
1、实现事务的原子性
Undo Log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 ROLLBACK 语句,MySQL 可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。
2、实现多版本并发控制(MVCC)
Undo Log 在 MySQL InnoDB 存储引擎中用来实现多版本并发控制。事务未提交之前,Undo Log保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读。
1)事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到 Undo Buffer 中。
2)事务B手动开启事务,执行查询操作,会读取 Undo 日志数据返回,进行快照读
这篇关于MySQL架构原理之存储引擎InnoDB_Undo Log的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7
- 2024-02-18从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践
- 2024-02-07mysql 外键索引入门介绍,为什么工作中很少有人使用?