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 湖南

相关推荐

27届毕业,最近想找一段大厂实习,感觉简历有些问题,好多都不给面,求大佬们指点,最近好焦虑
重生之我学Java干...:我从后端的角度分析一下你的第一个项目,我感觉亮点不是很突出。因为我是因为组内有需求,临时上手学react干活。我用到的技术基本就cover你那个智慧园区管理平台的很多亮点了。那作为比较专业的前端,你上述的内容是不是有点单薄呢。感觉还得包装
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

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