
5.redo undo
发布日期:2021-05-08 05:54:29
浏览次数:9
分类:原创文章
本文共 745 字,大约阅读时间需要 2 分钟。
1.使用场景
事务是持久性的,事务提交后先修改内存buffer,然后选择时机更新到磁盘。如果内存更新了,但是还没有来得及更新磁盘,就宕机了。那么怎么进行数据恢复??
事务是一致性的,在执行过程中发生错误,数据怎么回滚??
begin;UPDATE `t_user` SET `name`='更新1' WHERE (`id`='4'); # -->写入 undo logUPDATE `t_user` SET `name`='更新2' WHERE (`id`='4'); # -->写入 undo logcommit; # --> 写入 redo log
2.undo log
上面的列子可以看出,事务的每次数据的修改操作都会产生一条 undo log。undo log以链表的形式存储每个操作版本
的记录和数据对应的(具体格式参考MVCC文章)。当回滚时,只需要根据undo log的记录恢复数据即可。
3. redo log
WAL(write ahead log)即当事务提交时,先写redo log,再修改页。
由于redo log 写入磁盘时,是以扇区大小512B写入的,保证每次写都能写入成功。(数据页、索引页的刷盘是不容易
的,每次刷盘效率低,所以先修改内存,然后一起刷盘,但是内存更新了,还没刷盘就宕机数据无法恢复,所以引入redo log)
4.数据更新流程:
参考文章:
https://www.cnblogs.com/hapjin/archive/2019/09/28/11521506.html
jin/archive/2019/09/28/11521506.html
https://zhuanlan.zhihu.com/p/346970015
发表评论
最新留言
很好
[***.229.124.182]2025年04月04日 02时24分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
环境配置 jdk_mysql_myeclipse8.6
2019-03-05
Session验证码的实现(2018-7-3)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
kafka和rabbitmq对比
2019-03-05
日志写入xml上传ftp遇到的问题
2019-03-05
Eclipse中serverRuntime Environment中没有Tomcat选项
2019-03-05
下载任意版本vmware对应的vmware tools
2019-03-05
将 github 中他人的 仓库 导入 码云中,从而 加快下载速度的 方式
2019-03-05
Java 类加载的过程 加载、验证、准备、解析、初始化
2019-03-05
JavaWeb---实现JavaBean来接收参数、请求转发、域对象
2019-03-05
瀚高数据库中 java代码类型与bit对应(APP)
2019-03-05
选择性估算器绕过行安全策略漏洞
2019-03-05
admin 修改数据报错
2019-03-05
PostgreSQL中的触发器
2019-03-05
对PostgreSQL数据库结构的宏观理解
2019-03-05
Postgresql 日期和时间类型
2019-03-05
xmin、xmax、cmin、cmax
2019-03-05
《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列五:其它类型
2019-03-05
查询某表格上次进行vacuum的时间
2019-03-05
Failed to execute vcredist_x64.exe
2019-03-05