数据库缓存问题 --innodb

为什么缓存页新版本不用刷新到磁盘?当发生宕机的时候,缓存不就没了,为什么可以通过日志去回复?

img

首先你要明白什么是重做日志。
重做日志就是你进行DML操作时将你所有的操作数据记录到文件中。举个简单的例子,比如你进行insert,那么这些数据都会被按顺序的记录下来。你就简单的理解成这个insert语句都被记录下来了。然后要是发生了问题,恢复时就是把这个语句再执行一遍的意思。
那么为什么这么做呢?因为日志是顺序写,而如果要将数据写入到数据文件则是随机写,顺序写必然比随机写快很多。
实际上很多数据库都已经实现了该功能,就以Oracle为例子当你进行commit的时候,数据库其实并不保证已经将数据写入到磁盘。它只保证重做日志完成写入。 这时候数据库哪怕宕机了,仍然可以通过重做日志恢复数据。

重做日志当然越大越好,但是实际上并不需要,一般来说重做日志是循环的,因为有异步进程会不停的将数据刷新到磁盘。因此只要刷新到磁盘,重做日志实际就可以复用了。并不会像你这书上这么写无限大。因为你也要考虑恢复时间,真的宕机了,如果缓存中数据几个T不写入磁盘。那么光是恢复的时候就不是你所能忍受的。

如果你想了解更多可以关注我的公众号 唯一的小彬哥 。