doublewrite
(两次写)给InnoDB存储引擎带来的是数据页的可靠性。
为什么不用重做日志来恢复呢?
重做日志记录的是页的物理操作,比如偏移量800写’aaa’记录,如果这个页已经发生了损坏,那么对其做重做是没有意义的
doublewrite就是当写入失效的时候通过页的副本来还原该页,再进行重做:
A. 在覆盖磁盘上的数据前,先将Page的内容写入到磁盘上的其他地方(InnoDB存储引擎中的doublewrite buffer,这里的buffer不是内存空间,是持久存储上的空间).
B. 然后再将Page的内容覆盖到磁盘上原来的数据。
如果在A步骤时系统故障,原来的数据没有被覆盖,还是完整的。
如果在B步骤时系统故障,原来的数据不完整了,但是新数据已经被完整的写入了doublewrite buffer. 因此系统恢复时就可以用doublewrite buffer中的新Page来覆盖这个不完整的page。