第三章 crash recovery机制
一、为什么需要crash recovery
首先要从PostgreSQL的WAL说起。PG是面向磁盘的关系型数据库,数据的更新都需要在内存中完成,落盘才能保证持久化。普通硬盘的随机读写性能远小于顺序读写性能,而OLTP型业务大部分都是随机读写,若每次事务提交时都将内存中脏数据刷盘,势必会严重影响数据库系统性能。
WAL是数据页修改的日志,即修改后的数据镜像。通过WAL可以保证事务的原子性外,还可将随机写转变正顺序写,即每次事务提交时,将WAL持久化到磁盘,而脏数据页则由checkpoint进程和bgwriter进程异步刷写,从而降低磁盘IO对性能的影响。
因为脏数据是异步刷盘,所以当系统宕机或断电时,内存中脏数据可能还未持久化到磁盘,所以重启时为保证事务原子性及持久性,需要从WAL中将未持久化的数据恢复出来。
本文详细阐述了PostgreSQL数据库的crash recovery机制,包括为何需要恢复、如何识别需要恢复、恢复的起点与终点,以及如何应用WAL日志进行回放。在恢复过程中,PostgreSQL从WAL日志中读取并回放数据,确保事务的原子性和持久性,重点介绍了StartupXLOG函数的三个恢复阶段:恢复前、恢复中和恢复后。
订阅专栏 解锁全文
163

被折叠的 条评论
为什么被折叠?



