PG内核分析 Q&A (17)

但从本质上讲, PG日志并非REDO日志, 而应该是UNDO/REDO日志,
其创建检查点时大体上服务UNDO/REDO日志创建检查点时要服从的规则, 只是做了一点改动.

参考: 浅析MySQL事务中的redo与undo

https://www.jianshu.com/p/20e10ed721d0

2 XLOG日志管理器主要操作 XLOG日志管理器操作分几个组成

XLOG日志管理器的操作由以下几个部分组成:

日志文件的建立

初始化

启动操作

日志的插入

日志的归档

日志的删除

日志文件的恢复

日志备份块的读取

日志的REDO操作

3 XLOG日志恢复策略 XLOG日志恢复策略概述

在PG中, 系统在崩溃后重新启动时会调用StartupXlog入口函数,
该函数首先会扫描全局信息控制文件(global/pg_control)读取系统的控制信息,
然后扫描XLOG日志目录结构检测其是否完整,进而读取到最新的日志检查点记录,接下来根据日志记录序列的偏序关系检测到系统是否处理非正常状态下,
若系统处于非正常状态,
则触发恢复机制进行恢复.恢复完成后重新建立检查点并初始化XlogCtl控制信息,
然后启动事务提交日志以及相关辅助日志模块.

日志中出现哪几种情况时需要进行恢复操作

日志中出现以下三种情况需要进行恢复操作:

日志文件中扫描到back_label文件.

根据ControlFile记录的最新检查点读取不到日志记录.

根据ControlFile记录的检查点与通过该记录找到的检查点日志中的Redo位置不一致.

日志恢复的具体步骤有哪些

在PG系统中, 日志建立的策略是采用改进的非静止检查点的Redo日志,
恢复则是找到最近的合法检查点然后做Redo操作. 恢复操作的具步骤如下:

首先更新控制信息到ControFile中.

初始化日志恢复时所用到的资源管理器.

从检查点日志记录的REDO位置开始往后读取日志记录.

根据日志记录的资源管理器号选择对应的RMGR,
然后利用该RMGR做日志记录中所记录的操作过程(REDO操作).

重复步骤3和4的过程, 直至读取不到日志记录.

几种典型的日志的恢复操作介绍

在上述恢复流程中, 第4步的REDO操作会针对不同的日志类型做不同的恢复操作.
下面介绍几种典型日志的恢复操作.

Database类型的日志操作.

Heap类型的Redo操作.

B-Tree类型的Redo操作.

XLog类型的Redo操作.

恢复完成后都做了些什么

当恢复过程完成后, 重新建立检查点并重新初始化XlogCtl结构信息.
然后继续调用;StartupCLOG函数,
StartupSUBTRANS函数和StartupMultiXact函数完成事务提交日志及其他辅助日志模块的启动.

如果根据系统日志检测到系统不需要恢复操作, 那么将跳过恢复操作,
然后完成事务提交日志等相关模块的初始化.

7.11.6 日志管理器总结 ** 7.12 小结 **

如果我们把整个数据库系统视为一个团队,
那么事务系统在这个团队中扮演了”指挥官”的角色,
它根据外部用户命令以及系统内部状态决定了当前数据库系统中操作的执行方向.

在7.1节到7.5节中, 详细阐述了PG事务管理器的操作,
其核心功能就是根据当前状态和接收到的外部状态(用户命令)决定当前需要执行的操作,
所以它承担了整个系统的决策功能, 是”指挥官”的大脑.

在7.6到7.10节中,
详细阐述了PG的并发控制机制,其核心功能是为了在保证数据一致性的前提下提高并发度,
所有它承担了整个系统的调度协调功能, 是”指挥官”的节拍器.

在7.11节中, 详细阐述国PG的日志管理机制,
其核心功能是通过磁盘日志文件夹来记录数据库操作状态序列以及数据库变化过程,
所以它承担了整个系统的保障恢复功能.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysxsx.html