面试题答案
一键面试关键文件
- 预写式日志(WAL, Write-Ahead Log):记录了数据库所有的修改操作,用于崩溃恢复和流复制。它按顺序生成一系列的日志文件,每个文件有特定的命名规则。
- 控制文件(postgresql.control):存储着数据库集群的关键元数据,如检查点信息、最新的WAL位置等。
- 数据文件:包含实际的表数据、索引等数据库对象。
主要操作步骤
- 启动时检测故障:当PostgreSQL重新启动,系统会检查控制文件中的状态信息,判断数据库是否是正常关闭。若发现异常关闭,就会触发故障恢复流程。
- 重放WAL日志:
- 从控制文件中获取故障前最后一个检查点的位置。
- 从该检查点位置开始,读取并重放WAL日志文件中的记录。重放过程会将未完成的事务回滚,并重新应用已提交事务对数据文件所做的修改,使数据库恢复到故障前的一致性状态。
- 回滚未完成事务:在重放WAL日志时,遇到未提交的事务(即没有提交记录的事务),会进行回滚操作,撤销这些事务对数据文件的部分修改,以确保数据库的一致性。
- 更新控制文件:故障恢复完成后,更新控制文件中的状态信息,记录数据库已成功恢复到一致性状态,更新最新的检查点位置等信息。
- 数据库恢复正常服务:完成上述步骤后,数据库恢复到一个一致性状态,可以正常接收用户的连接和执行新的事务操作。