PostgreSQL之WAL段文件管理

news/2024/7/9 23:05:11 标签: postgresql, 数据库

在前面我们了解了PG数据库的故障恢复依赖于在启动时通过回放WAL段文件中的XLOG记录来完成,这篇我们学习一下PG数据库中WAL段文件是怎么管理的。
首先,我们需要知道WAL段文件是保存在pxg_xlog(PG V10版本以前,在PG V10版本以后变成 pg_wal)子目录下,如果一个WAL段文件写满后就会切换到一个新的段文件。总的WAL段文件个数由几个配置参数决定的。此外,对于WAL段文件的管理机制在PG 9.5版本得到了提升。

WAL段的切换

WAL段会在以下几种情况下发生切换:

  1. 一个WAL段文件被写满。
  2. 调用pg_switch_xlog函数。
  3. 开启archive_mode,且设置的archive_timeout达到超时时间。

被切换的文件经常会被回收(重命名并重新使用),不过如果不是必要的话也有可能被删除。

WAL段管理

当一个checkpoint开始时,数据库会评估并准备这一次checkpoint过程需要的WAL段文件个数。这个评估是根据之前checkpoint使用的文件数做出来的。他们从包含前一个REDO point的段开始算,值需要在min_wal_size(默认80MB,如5个文件)和max_wal_size(1GB,如64个文件)。当checkpoint开始,必要的文件会被保留或回收,不必要的文件会被删除。
以下是一个具体的例子。假如checkpoint开始前有6个WAL段文件,WAL_3包含上一个REDO point(在PG11及后面版本就是REDO point,因为已经没有prior REDO point),数据库在checkpoint开始时评估需要5个文件。此时,WAL_1会被重命名为WAL_7回收利用而WAL_2会被删除。
在这里插入图片描述
如果评估需要更多的文件,新的文件会被创建出来,总的WAL文件大小不能超过max_wal_size。比如下面例子,如果WAL_7被写满,WAL_8就会被创建出来。
在这里插入图片描述
根据服务的活跃情况WAL文件的个数会自适应地变化。如果WAL数据会持续的写并一直增长,那么评估出来的WAL段文件以及WAL文件的总尺寸也会相应的增长。相反,他们就会下降。
如果总的WAL文件大小超过了max_wal_size,就会开始一个checkpoint动作。通过checkpoint,一个新的REDO point被创建,然后上一个REDO point变成之前的,之后不必要的老的文件就会被回收。通过这种方式,PG总能够持有数据库恢复所需要的WAL段文件。
在这里插入图片描述配置参数wal_keep_size(在PG 12或早期称为wal_keep_segments)也会影响WAL段文件的个数。

连续归档及归档日志

连续归档(Continuous Archiving)是一个新功能,在WAL段进行切换的时候将WAL段文件拷贝到归档路径,通过后台archiver进程来执行。被复制的文件也被称为archive log。这个功能经常会被用于物理备份以及PITR时间点恢复

归档路径由参数archive_command控制,如:

archive_command = 'cp %p /home/postgres/archives/%f'

在这里插入图片描述
如上图所示,当WAL_7切换时,这个文件就会归档到归档目录下面,即Archive log 7。
在PG 14或早期版本,连接归档只能使用shell命令。在PG 15中,PG支持了一个可加载库功能来归档日志。


http://www.niftyadmin.cn/n/192522.html

相关文章

Linux diffstat命令

Linux diffstat命令根据diff的比较结果&#xff0c;显示统计数字。 diffstat读取diff的输出结果&#xff0c;然后统计各文件的插入&#xff0c;删除&#xff0c;修改等差异计量。 语法 diff [-wV][-n <文件名长度>][-p <文件名长度>]参数&#xff1a; -n<文…

【Linux】进程理解与学习-程序替换

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅 相关文章推荐&#xff1a; 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学…

基于html+css的自适应around布局

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

学习笔记之Vue中的vue-router(六)

vue-router&#xff08;六&#xff09;vue-router一、路由的简介1.1 vue-router的理解1.2 **对 SPA 应用的理解**1.3 路由的理解二、路由的基本使用三、几个注意点四、嵌套&#xff08;多级&#xff09;路由五、路由传参5.1 路由的query参数5.2 命名路由5.3 路由的params参数5.…

银行数字化转型导师坚鹏:数字人民币创新及金融场景应用

数字人民币创新及金融场景应用课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚数字人民币的发展历程&#xff1f; 不清楚数字人民币对我们有什么影响&#xff1f; 不知道数字人民币具体应用场景&#xff1f; 课程特色&#xff1a; 前沿性&#xff1a;创新金…

49学习容器管理平台 Docker Swarm 的基本概念和应用,包括节点管理、服务编排

Docker Swarm 是 Docker 官方提供的容器编排工具&#xff0c;可以管理多个 Docker 节点&#xff0c;并支持自动化扩展、负载均衡等功能。下面是 Docker Swarm 的基本概念和使用方法&#xff0c;包括节点管理和服务编排。 节点管理 在 Docker Swarm 中&#xff0c;一个或多个 D…

tensorflow编程实战

文章目录1&#xff1a;线性回归模型2&#xff1a;实现卷积神经网络做图像分类3&#xff1a;LSTM实现情感分类4&#xff1a;用GAN生成手写数字5&#xff1a;实现自编码器1&#xff1a;线性回归模型 下列代码中&#xff0c;首先生成了一组训练数据&#xff0c;然后定义了一个线性…

Android Kotlin协程coroutine

1.协程coroutine 协程是一种并发设计模式&#xff0c;在Kotlin中使用协程可以简化异步执行的代码&#xff0c;把异步回调代码同步化。 协程&#xff0c;其实就是相互协作的子程序&#xff0c;多个子程序之间通过一定的机制相互关联、协作地完成某项任务。比如一个协程在执行上…