undo log和redo log

数据库是先写日志,再写数据!!!

undo

  • 用undo log来实现多版本并发控制
  • 比如update的时候会将原来的数据存到undo log,再更新值
  • 前提:先将数据读到内存,然后修改内存中的数据,再写回磁盘
    图片说明

可以保证持久性

  • 由于更新数据前会先写入undo log
  • 事务提交前,数据就写入到磁盘中,所以保证持久性

为什么undo log要比数据先持久化到磁盘?

  • 因为如果数据写入磁盘的时候崩溃了,就可以通过undo log回滚
  • 因为如果undo log也没写入的话,那么数据就是事务开始前的状态

那有什么问题呢?

  • 每次事务提交前都需要将数据undo log写入磁盘,影响性能
  • 如果可以将数据缓存一段时间,那么久可以减少io提高性能
  • 这时候就要引入redo log

redo

用过idea都知道,undo是撤销,redo就是撤销的撤销

有什么用呢?

比如我们写入redo logundo log后,然后写入数据的时候崩溃了,本来我们就得回滚到undo log记录的状态。但此时,我们已经将最新的状态记录到redo log,就根据redo log内容恢复最新数据即可。

  • 数据可能会丢失,但log不会
    图片说明

https://blog.csdn.net/ccfeng2008/article/details/51762861

全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务