MST

星途 面试题库

面试题:PostgreSQL Zheap引擎故障恢复机制的基本原理

请简要阐述PostgreSQL Zheap引擎故障恢复机制的基本原理,包括涉及到的关键组件和大致流程。
27.8万 热度难度
数据库PostgreSQL

知识考点

AI 面试

面试题答案

一键面试

关键组件

  1. 预写式日志(Write - Ahead Log,WAL):记录数据库的所有修改操作,是故障恢复的基础。每次事务对数据进行修改前,先将该修改操作记录到WAL日志中。
  2. 检查点(Checkpoint):定期将缓冲区中的脏数据(已修改但未持久化到磁盘的数据)刷新到磁盘,并在WAL日志中标记检查点记录。它能确定在故障恢复时需要重放的日志起点。

基本原理与大致流程

  1. 正常运行时
    • 事务执行修改操作,先将修改记录写入WAL日志,确保日志已持久化到磁盘(fsync操作),然后才允许修改内存中的数据页。
    • 检查点进程定期工作,将内存中脏数据页刷回磁盘,并在WAL日志中写入检查点记录,记录当前所有已提交事务的LSN(日志序列号,用于标识WAL日志中的位置)。
  2. 故障发生时
    • 数据库崩溃后重启。
  3. 恢复流程
    • 分析阶段:从WAL日志末尾开始向前扫描,找到最近的检查点记录。确定需要重放的日志起点,即检查点记录中记录的所有已提交事务的LSN。同时,构建一个事务表,记录哪些事务在崩溃时处于活跃状态(未提交)。
    • 重做阶段(Redo):从分析阶段确定的日志起点开始,重放WAL日志中的记录,将已提交事务对数据页的修改重新应用到数据库缓冲区(内存),恢复崩溃前已提交事务对数据的修改。
    • 撤销阶段(Undo):对分析阶段确定的处于活跃状态的事务,反向扫描WAL日志,撤销这些未提交事务对数据页的修改,保证数据库的一致性。在撤销完成后,数据库恢复到崩溃前的一致状态。