一、目的
一致性和持久性:
为了性能,innoDB会将数据缓存在内存中,所以对磁盘数据的修改会落后于内存,这时如果进程或机器崩溃,会导致内存数据丢失;为了保证数据的一致性和持久性,修改Page之前需要先将修改的内容记录到REDO中,并保证REDO LOG早于对应的Page落盘
二、设计
那么我们需要什么样的REDO呢?首先,REDO的维护增加了一份写盘数据,同时为了保证数据正确,事务只有在他的REDO全部落盘才能返回用户成功,REDO的写盘时间会直接影响系统吞吐,显而易见,REDO的数据量要尽量少。其次,系统崩溃总是发生在始料未及的时候,当重启重放REDO时,系统并不知道哪些REDO对应的Page已经落盘,因此REDO的重放必须可重入,即REDO操作要保证幂等。最后,为了便于通过并发重放的方式加快重启恢复速度,REDO应该是基于Page的,即一个REDO只涉及一个Page的修改。