第三章 crash recovery机制
一、为什么需要crash recovery
首先要从PostgreSQL的WAL说起。PG是面向磁盘的关系型数据库,数据的更新都需要在内存中完成,落盘才能保证持久化。普通硬盘的随机读写性能远小于顺序读写性能,而OLTP型业务大部分都是随机读写,若每次事务提交时都将内存中脏数据刷盘,势必会严重影响数据库系统性能。
WAL是数据页修改的日志,即修改后的数据镜像。通过WAL可以保证事务的原子性外,还可将随机写转变正顺序写,即每次事务提交时,将WAL持久化到磁盘,而脏数据页则由checkpoint进程和bgwriter进程异步刷写,从而降低磁盘IO对性能的影响。
因为脏数据是异步刷盘,所以当系统宕机或断电时,内存中脏数据可能还未持久化到磁盘,所以重启时为保证事务原子性及持久性,需要从WAL中将未持久化的数据恢复出来。
二、需要搞清楚的几个问题
1、数据库重启时怎么识别自己需要恢复,即上次关闭是非正常关闭
2、数据库从什么地方开始恢复,到什