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 log
和undo log
后,然后写入数据的时候崩溃了,本来我们就得回滚到undo log
记录的状态。但此时,我们已经将最新的状态记录到redo log
,就根据redo log
内容恢复最新数据即可。
- 数据可能会丢失,但log不会