Redo log(重做日志)主要有以下作用:
一、保证事务的持久性
当数据库发生故障(如系统崩溃、断电等)时,可能会导致内存中的数据丢失。Redo log 可以确保事务对数据库的修改在故障发生后能够被恢复,从而保证了事务的持久性。
具体来说,在事务执行过程中,对数据的修改会先记录到 Redo log 中,然后再修改内存中的数据页。如果在事务提交之前发生故障,系统可以在重新启动时,通过读取 Redo log 中的记录,重新执行那些未完成的事务修改,将数据恢复到故障发生前的状态。
二、提高数据库性能
- 顺序写入:
- 磁盘的随机写入相对较慢,而 Redo log 是采用顺序写入的方式。顺序写入可以充分利用磁盘的性能,比随机写入要快得多。事务对数据的修改首先记录在内存中的 Redo log buffer(重做日志缓冲区),然后再以顺序的方式批量写入磁盘上的 Redo log 文件,大大提高了写入效率。
- 减少数据页的写入次数:
- 如果没有 Redo log,每次事务修改数据页后都需要立即将数据页写入磁盘以保证持久性,这会导致频繁的磁盘 I/O 操作,严重影响数据库性能。而有了 Redo log,数据页的写入可以延迟进行,只有在满足一定条件时(如内存不足、后台检查点触发等)才将数据页写入磁盘,减少了磁盘 I/O 次数。