undo log是怎么保证事务原子性的

最近在学数据库,碰到一个问题想不通,就是使用redolog不就可以保证事务原子性了吗。
首先写写我理解的流程:事务提交-》redolog buffer 写入磁盘-》给用户返回事务提交成功-》后台线程在合适的时机将buffer pool中的数据写入磁盘(如果失败则从redolog中恢复)。
那如果是这样的话,在事务提交以前,所有操作都是在内存中进行的,undolog还有什么意义呢。毕竟只有在事务提交以后所有操作才会全部被写到磁盘中,而这时redolog也已经记录了全部的操作了,我们直接从redolog中拿不行吗。
全部评论
有一个版本链表,头插法,从头遍历的。
1 回复 分享
发布于 2024-04-08 09:46 上海
查找效率的问题,undolog直接版本链,redolog是一个连续的文件,你不能从头一个个找吧
1 回复 分享
发布于 2024-03-31 17:23 江苏
steal/no-steal: 是否允许一个uncommitted的事务将修改更新到磁盘,如果是steal策略,那么此时磁盘上就可能包含uncommitted的数据,因此系统需要记录undo log,以防事务abort时进行回滚(roll-back)。如果是no steal策略,就表示磁盘上不会存在uncommitted数据,因此无需回滚操作,也就无需记录undo log。 mysql采用的是steal策略
点赞 回复 分享
发布于 2024-04-08 11:21 江苏
原子性是要么都做,要么都不做,redo保证都做,undo保证都不做
点赞 回复 分享
发布于 2024-04-08 08:41 湖北
两个对应不同的情景,undolog对应事务执行失败需要回滚到之前的状态,redolog方便断电之后的持久化
点赞 回复 分享
发布于 2024-03-20 17:17 湖北
单只讲undolog保证原子性这一条,mvcc暂不讨论
点赞 回复 分享
发布于 2024-03-20 15:59 湖南

相关推荐

04-25 19:29
已编辑
宁波大学 测试开发
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务