redo log的用处
redo log用途
1. 用途
保证数据的更新操作不丢失,同时保证了性能
2. 如何没有redo log,如何保证数据库的更新操作不会由于数据库的宕机而丢失?
对数据库进行修改,应该是先从磁盘读取数据到内存中,然后在内存中对数据进行修改,然后再将数据写入到磁盘中,这样才能数据库
才能返回数据修改成功
按照数据库处理流程来说,首先应该是通过连接器接收到一条SQL语句,然后解析器对这条SQL进行词法解析,然后由优化器生成一个
执行计划,接下来就交由执行器来执行这个计划,执行器将会调用引擎接口从而实现更新操作
这里就存在一个问题,内存中不存在要修改的数据所在的数据页,此时就要将该数据页从磁盘中读取出来,然后修改完成之后,为了防止
数据库奔溃,就需要将数据写入磁盘中,从这个角度来看,一次数据库的更新操作,就要操作两次磁盘了
3. 如何使用redo log来保证更新操作的不丢失?
数据修改成功之后,就需要将该数据页刷到磁盘中去,以防丢失,但是现在已经引入了redo log,此时只需要这个修改信息写入到redo log当中,也就是将哪个数据页哪里发生了修改写入到redo log当中,而不需要将修改过的整个数据页刷到磁盘当中去
4. 写redo log同样也是一次磁盘的写操作,凭什么说它的性能就更高一点呢?
写redo log还有刷数据页到磁盘中去,都是磁盘的的写操作,但是呢,将修改信息写入到redo log当中,只需要数据顺序写入redo log
当中,这里其实就是一次顺序写磁盘的操作.
而将数据页刷到磁盘中,因为一个修改操作可能会同时修改多个数据页,这些数据页又不是连续的,此时就意味着随机写磁盘
并且,对于MySQL来说,一个数据页是16kb,可能一次性更新多个数据页,此时可能需要随机写入几百k的数据
而对于redo log,一次修改可能只需要写入几k的数据,数据量相对于刷数据页的方式是大大减少的
比较一下写redo log和刷数据页,写redo log是磁盘的顺序写,小数据量,而刷数据页到磁盘可能就意味着随机写,而且还是
大数据量的,两者一比较,写redo log的性能可能比刷数据页的性能高100倍
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)