当前位置: 首页 > web >正文

PostgreSQL-日志管理介绍

  • 概述

1、日志管理器:

  1. 日志模块包括事务提交日志CLOG和数据日志XLOG。其中CLOG是系统为整个事务管理流程所建立的日志,主要用于记录事务的状态,同时通过SUBTRANS日志记录事务的嵌套关系。XLOG日志是数据库日志的主体,记录数据库中所有数据操作的变化过程。因此,XLOG日志管理器模块提供了日志操作的API供其他模块调用。
  2. 日志伴随着系统启动开始,始终在反复完成插入、刷新这样的过程,一旦系统崩溃还要完成数据恢复的功能。

2、SLRU缓冲池:PGSQL通过SLRU缓冲区来实现对CLOG日志、SUBTRANS日志以及MultiXact日志的管理。

SLRU缓冲池采用简单LRU算法作为页面置换算法的缓冲池。

SLRU由8个缓冲区组成。每个缓冲区为一个页面,对应一个磁盘块,大小为8KB。页面调度算法采用SLRU算法,即简单的最近最少使用算法。

SLRU缓冲池的并发控制:

一个LWLock保护缓冲区内容

一个LWLock保护I/O同步

3、CLOG日志管理器:CLOG日志管理器管理着CLOG日志缓冲池,该日志缓冲池是基于SLRU缓冲池实现的。CLOG日志记录的是事务的最终状态。

CLOG记录的四种事务状态:

事务正在运行in_progress

事务已提交committed

事务中止aborted

子事务已提交sub_committed

4、SUBTRANS日志管理器:记录子事务与父事务的关系。

SUBTRANS日志管理器管理一个基于SLRU缓冲池的缓冲池,存出每个子事务的父事务ID,通过遍历事务树可以由子事务到父事务,但是无法由父事务找到子事务。SUBTRANS日志只记录当前事务的父事务信息,系统崩溃或者重启时不保存数据。不需要和XLOG交互,也没有REDO操作。

5、MultiXact日志管理器

MultiXactID:由于PGSQL采用了多版本并发控制,那么同一个元组相关联的事务ID可能有多个,为了在加锁(行被多个事务加共享锁)的时候统一操作,PGSQL将与该元组相关联的事务ID组合用一个MultiXactID代替来管理。

6、XLOG日志管理器 

XLOG是传统数据库理论中提到的事务日志,它详细记录了后端进程对数据库的操作过程(修改操作)。

每个XLOG文件都有一个ID,一个日志文件逻辑上为4G,实际上被分为一个个16MB的段文件存放,日志段文件名由时间线ID、日志ID、段ID的八位16进制数以此构成。

确定日志文件内一个日志记录,只需用一个XLOG文件号和日志记录在该文件内的偏移量即可。

XLOG日志管理器的主要操作:

XLOG日志的启动:系统引导时,创建第一个XLOG日志文件,同时在XLOG中插入第一条检查点记录,同时调用BootStrapCLOG、BootStrapSUBTRANS和BootStrapMultiXact对CLOG、SUBTRANS、MultiXact日志记录分别进行初始化。

XLOG日志文件的创建:建立一个新的XLOG段文件,使其成为当前的段或一个紧邻当前段的段。

XLOG日志文件的归档:按照WriteRqst所指示的写请求将日志写/同步到磁盘日志文件中

XLOG日志的刷新:确保到达给定位置的所有的XLOG数据都被刷写回磁盘

XLOG日志的插入:根据一个XlogRecData链表及相应的资源管理器信息,向XLOG日志文件中插入一条XLOG记录,事务执行插入、删除、更新、提交、中止等命令时需要调用该函数。

XLOG日志的打开:创建一个新的XLOG段文件或者打开一个已存在的XLOG段文件

XLOG日志文件的拷贝:拷贝一个已经存在的XLOG文件来创建一个新的XLOG段文件,用于恢复阶段

XLOG日志备份块的恢复:如果在一个XLOG记录中存在任何备份的块,那么将其恢复

XLOG日志记录的读取:尝试读一条XLOG记录

7、XLOG日志的恢复策略:先找到XLOG日志中最近建立并有效的检查点之后,读出检查点结构中Redo指针所指向的日志记录,根据日志记录类型调用不同的资源管理器,开始Redo操作。顺着日志的记录顺序往后做,直到做完最后一个日志记录。Redo主要用于确保已提交的事务修改的数据刷新到磁盘上。系统崩溃后重新启动会调用StartupXLOG入口函数,进行日志恢复。

http://www.xdnf.cn/news/1684.html

相关文章:

  • 如何将极狐GitLab 议题导出为 CSV?
  • 2025顶会:CNN+LSTM+Attention多热点搭配
  • 爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
  • MySQL SQL查询语句执行过程
  • QLExpress 深度解析:构建动态规则引擎的利器
  • 云蝠智能大模型呼叫:AI驱动的通信服务革新与实践
  • 格式工厂:多媒体转换工具
  • Red:1靶场环境部署及其渗透测试笔记(Vulnhub )
  • 路由交换网络专题 | 第七章 | BGP练习 | 次优路径 | Route-Policy | BGP认证
  • 本地缓存大杀器-Caffeine
  • HTML响应式网页设计与跨平台适配
  • vue element使用el-table时,切换tab,table表格列项发生错位问题
  • 驱动开发硬核特训 · Day 19:从字符设备出发,掌握 Linux 驱动的实战路径(含 gpio-leds 控制示例)
  • 成人高考难吗-录取线仅需120分?
  • Mysql主从复制和读写分离
  • 运维打铁:Centos 7 安装 redis_exporter 1.3.5
  • 大语言模型之提示词技巧
  • 多线程环境下的资源共享与线程安全问题
  • SpringBootTest报错
  • 更新英雄位置
  • CS144 Lab 6 实战记录:构建 IP 路由器
  • LLM量化技术全景:GPTQ、QAT、AWQ、GGUF与GGML
  • 如何在 Odoo 18 中配置自动化动作
  • 如何在 Unity 中导入 gltf /glb 文件
  • 机器人灵巧手有刷与无刷空心杯电机解析
  • Bean的生命周期
  • 免费的 HTML 网页托管服务
  • 图像预处理-霍夫变换
  • React学习路线
  • 解决高德地图AMapUtilCoreApi、NetProxy类冲突