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

针对PostgreSQL中pg_wal目录占用过大的系统性解决方案

一、问题现象与根本原因

pg_wal目录占用超过预期(如数十GB甚至占满磁盘),通常由以下原因导致

  1. 长事务未提交​:未完成的事务会阻塞WAL日志清理。
  2. 复制槽未释放​:逻辑复制或流复制槽未及时清理,导致WAL文件保留。
  3. 检查点配置不合理​:checkpoint_timeout时间过长或max_wal_size设置过大。
  4. 归档失败​:若启用归档模式但archive_command执行失败,WAL文件无法归档和清理。
  5. 逻辑复制延迟​:备库未及时同步主库数据,导致主库保留冗余WAL。

以下是针对PostgreSQL中pg_wal目录占用过大的系统性解决方案,适合整理成CSDN技术博客:


一、问题现象与根本原因

pg_wal目录占用超过预期(如数十GB甚至占满磁盘),通常由以下原因导致

2

4

  1. 长事务未提交​:未完成的事务会阻塞WAL日志清理。
  2. 复制槽未释放​:逻辑复制或流复制槽未及时清理,导致WAL文件保留。
  3. 检查点配置不合理​:checkpoint_timeout时间过长或max_wal_size设置过大。
  4. 归档失败​:若启用归档模式但archive_command执行失败,WAL文件无法归档和清理。
  5. 逻辑复制延迟​:备库未及时同步主库数据,导致主库保留冗余WAL。

二、诊断方法

1. 检查WAL占用情况
-- 查看当前WAL日志总量(单位GB)
SELECT pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), '0/0')::bigint);
2. 定位未完成的复制槽
SELECT slot_name, active, restart_lsn FROM pg_replication_slots;

若存在未使用的复制槽(activefalse),需手动清理

3. 检查长事务
SELECT pid, query, now() - xact_start AS duration 
FROM pg_stat_activity 
WHERE state IN ('idle in transaction', 'active') 
ORDER BY duration DESC;

终止超过1小时未提交的事务

三、解决方案

1. 调整WAL保留策略

修改postgresql.conf参数:

max_wal_size = 4GB        -- 控制WAL最大空间(默认1GB)
min_wal_size = 1GB        -- 最小保留空间(默认80MB)
checkpoint_timeout = 5min -- 触发检查点的时间间隔(默认5分钟)
wal_keep_segments = 0     -- 禁用冗余WAL保留(默认0)

修改后执行pg_ctl reload生效

2. 清理复制槽
-- 删除无效复制槽
SELECT pg_drop_replication_slot('slot_name');
3. 强制触发检查点
CHECKPOINT; -- 手动触发检查点,回收旧WAL文件
4. 归档模式下的清理

若启用归档(archive_mode = on):

此命令会删除比指定文件名更早的所有归档文件

5.windows下面执行删除wal记录

定期清理pg事务日志
SELECT pg_walfile_name_offset(pg_current_wal_lsn());
CHECKPOINT;
"D:\PostgreSQL\bin\pg_archivecleanup.exe" "D:\postgresql\data\pg_wal" 0000000100002A28000000C4

6.linux下执行删除记录

# 停止数据库
pg_ctl stop# 定位可删除的WAL文件(基于检查点)
pg_controldata $PGDATA | grep "Latest checkpoint's REDO WAL file"
# 示例输出:0000000100000001000000A2# 删除该文件之前的所有WAL(谨慎操作!)
cd $PGDATA/pg_wal
rm -f 0000000100000001000000A1  # 仅示例,实际需按文件名顺序删除# 重启数据库
pg_ctl start

四、自动化清理脚本

脚本示例​(每日清理15天前的归档):

#!/bin/bash
ARCHIVE_DIR="/path/to/archive"
RETENTION_DAYS=15
LATEST_WAL=$(pg_controldata $PGDATA | grep "Latest checkpoint's REDO WAL file" | awk '{print $6}')# 清理旧归档
pg_archivecleanup $ARCHIVE_DIR $LATEST_WAL
find $ARCHIVE_DIR -name "000*" -mtime +$RETENTION_DAYS -exec rm -f {} \;

定时任务​(通过crontab):

0 2 * * * /path/to/cleanup_script.sh >> /var/log/pg_wal_clean.log 2>&1

五、注意事项

  1. 监控工具建议​:
    • 部署Prometheus+Alertmanager监控pg_wal目录大小。
  2. 测试环境验证​:所有参数调整和清理操作需先在非生产环境验证。

相关文章:

针对PostgreSQL中pg_wal目录占用过大的系统性解决方案

​一、问题现象与根本原因​ 当pg_wal目录占用超过预期(如数十GB甚至占满磁盘),通常由以下原因导致 ​长事务未提交​:未完成的事务会阻塞WAL日志清理。​复制槽未释放​:逻辑复制或流复制槽未及时清理,导…...

git push Git远端意外挂断

git push Git远端意外挂断 枚举对象中: 99, 完成. 对象计数中: 100% (99/99), 完成. 使用 8 个线程进行压缩 压缩对象中: 100% (78/78), 完成. send-pack: unexpected disconnect while reading sideband packet 写入对象中: 100% (82/82), 2.78 MiB | 5.56 MiB/s, 完成. 总共…...

python学习day34

GPU训练及类的call方法 知识点回归: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前向传播时可以直接写作…...

秋招Day12 - 计算机网络 - 网络综合

从浏览器地址栏输入URL到显示网页的过程了解吗? 从在浏览器地址栏输入 URL 到显示网页的完整过程,并不是一个单一的数据包从头到尾、一次性地完成七层封装再七层解析的过程。 而是涉及到多次、针对不同目的、与不同服务器进行的、独立的网络通信交互&a…...

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象 键值对QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…...

IP 风险画像技术略解

IP 风险画像的技术定义与价值 IP 风险画像通过整合 IP 查询数据与 IP 离线库信息&#xff0c;结合机器学习算法&#xff0c;为每个 IP 地址生成多维度风险评估模型。其核心价值在于将传统的静态 IP 黑名单升级为动态风险评估体系&#xff0c;可实时识别新型网络威胁&#xff0…...

秋招Day12 - 计算机网络 - 基础

说一下计算机网络体系结构 OSI七层模型&#xff0c;TCP/IP四层模型和五层体系结构 说说OSI七层模型&#xff1f; 应用层&#xff1a;最靠近用户的层&#xff0c;用于处理特定应用程序的细节&#xff0c;提供了应用程序和网络服务之间的接口。表示层&#xff1a;确保从一个系…...

【网络安全】——Modbus协议详解:工业通信的“通用语言”

目录 一、初识Modbus&#xff1a;工业通信的基石 1.1 协议全称 1.2 协议简史 二、核心特性解析 2.1 架构设计 2.2 典型应用场景 三、协议族全景图 3.1 协议栈分类 3.2 版本演进对比 四、协议报文深度解析 4.1 Modbus RTU帧结构 4.2 Modbus TCP报文 五、通信机制实…...

MySQL 数据库备份与恢复利器:Percona XtraBackup 详解

一、XtraBackup 简介 1. 什么是 XtraBackup&#xff1f; XtraBackup 是 Percona 公司推出的免费开源工具&#xff0c;专为 InnoDB/XtraDB 引擎设计&#xff0c;支持 在线物理热备&#xff0c;具备以下核心特性&#xff1a; 非阻塞备份&#xff1a;备份过程中数据库仍可读写。…...

【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角

文章目录 一、加载无人机照片二、计算方位角三、Globalmapper符号化显示方向四、arcgis符号化显示方向一、加载无人机照片 打开软件,加载无人机照片,在GLobalmapperV26中文版中,默认显示如下的航线信息。 关于航线的起止问题,可以直接从照片名称来确定。 二、计算方位角 …...

小提琴图绘制-Graph prism

在 GraphPad Prism 中为小提琴图添加显著性标记(如*P<0.05)的步骤如下: 步骤1:完成统计检验 选择数据表:确保数据已按分组排列(如A列=Group1,B列=Group2)。执行统计检验: 点击工具栏 Analyze → Column analyses → Mann-Whitney test(非参数检验,适用于非正态数…...

写作即是生活

一个问题 “我是什么时候开始写作的呢&#xff1f;”请你先暂停一下&#xff0c;别往下读&#xff0c;先想想这个问题。 什么才是写作&#xff1f; 或许在想上个问题之后&#xff0c;你就会开始想问另外一个问题&#xff0c;什么才算是写作呢&#xff1f; 我的回答是&#x…...

进阶知识:Selenium底层原理深度解析

Selenium底层原理深度解析&#xff1a;网络IO密集型系统揭秘 一、Selenium核心组件解析 1.1 三大核心角色 客户端&#xff08;Client&#xff09; 扮演"指挥官"角色&#xff0c;负责&#xff1a; 编写测试脚本&#xff08;模拟用户点击、输入等操作&#xff09;发送…...

基于 Flickr30k-Entities 数据集 的 Phrase Localization

以下示例基于 Flickr30k-Entities 数据集中的标注&#xff0c;以及近期&#xff08;以 TransVG &#xff08;Li et al. 2021&#xff09;为例&#xff09;在短语定位&#xff08;Phrase Grounding&#xff09;任务上的评测结果&#xff0c;展示了单张图片中若干名词短语的定位情…...

[GHCTF 2025]SQL???

打开题目在线环境&#xff1a; 先尝试注入&#xff1a; id1;show databases; 发现报错&#xff0c;后来看了wp才知道这个题目是SQLite注入。 我看的是这个师傅的wp: https://blog.csdn.net/2401_86190146/article/details/146164505?ops_request_misc%257B%2522request%255Fid…...

【科研绘图系列】R语言绘制GO term 富集分析图(enrichment barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图code 2code 3系统信息介绍 本文介绍了使用R语言绘制GO富集分析条形图的方法。通过加载ggplot2等R包,对GO term数据进行预处理,包括p值转换…...

JavaScript 性能优化实战指南

JavaScript 性能优化实战指南 一、引言 JavaScript 是一种广泛使用的编程语言,尤其在前端开发中占据重要地位。随着 Web 应用的复杂度不断增加,性能优化成为开发过程中不可或缺的一部分。性能优化不仅可以提升用户体验,还能减少服务器负载,提高应用的响应速度。本文将从多…...

达梦数据库:同1台服务器如何启动不同版本的DMAP服务

需求背景&#xff1a; 用户使用资源比较高的服务器&#xff0c;作为测试环境提供服务器&#xff0c;因为在这台服务器&#xff0c;运行了很多个数据库版本实例的情况&#xff0c;但是当dmap版本和数据库版本不一致时&#xff0c;通过dmap备份会报错。 解决办法&#xff1a; 1…...

Laravel单元测试使用示例

Date: 2025-05-28 17:35:46 author: lijianzhan 在 Laravel 框架中&#xff0c;单元测试是一种常用的测试方法&#xff0c;它是允许你测试应用程序中的最小可测试单元&#xff0c;通常是方法或函数。Laravel 提供了内置的测试工具PHPUnit&#xff0c;实践中进行单元测试是保障代…...

Kotlin委托机制使用方式和原理

目录 类委托属性委托简单的实现属性委托Kotlin标准库中提供的几个委托延迟属性LazyLazy委托参数可观察属性Observable委托vetoable委托属性储存在Map中 实践方式双击back退出Fragment/Activity传参ViewBinding和委托 类委托 类委托有点类似于Java中的代理模式 interface Base…...

鸿蒙OSUniApp集成WebAssembly实现高性能计算:从入门到实践#三方框架 #Uniapp

UniApp集成WebAssembly实现高性能计算&#xff1a;从入门到实践 引言 在移动应用开发领域&#xff0c;性能始终是一个永恒的话题。随着计算需求的不断增加&#xff0c;特别是在图像处理、数据分析等领域&#xff0c;如何在跨平台应用中实现高性能计算成为了一个重要课题。本文…...

基于 HT for Web 轻量化 3D 数字孪生数据中心解决方案

一、技术架构&#xff1a;HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎&#xff0c;核心技术特性包括&#xff1a; 跨平台渲染&#xff1a;采用 WebGL 技术&#xff0c;支持 PC、移动端浏览器直接访问&#xff0c;兼容主流操作系统…...

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)

一种多群体智能优化算法&#xff0c;其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作&#xff0c;平衡算法的全局探索与局部开发能力&#xff0c;从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法&#xff08;如粒子群优化、遗传算法&#xf…...

解决Ubuntu20.04上Qt串口通信 QSerialPort 打开失败的问题

运行Qt串口通信 open(QIODevice::ReadWrite) 时&#xff0c;总是失败。 1、打印失败原因 QString QSerialHelper::openSerail() {if(this->open(QIODevice::ReadWrite) true){return this->portName();}else{return "打开失败";//return this->errorStri…...

深入浅出:使用DeepSeek开发小程序的完整指南

深入浅出:使用DeepSeek开发小程序的完整指南 1. 《从零开始:DeepSeek小程序开发环境搭建》 ​​引言:​​ "工欲善其事,必先利其器",在开始DeepSeek小程序开发之旅前,搭建一个高效的开发环境是至关重要的第一步。本文将手把手带你完成从软件安装到第一个&quo…...

设计模式——观察者设计模式(行为型)

摘要 本文详细介绍了观察者设计模式&#xff0c;包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式&#xff0c;以及如何通过该模式实现状态变化通知。同时&#xff0c;对比了观察者模式与消息中间件在设计理念、耦合程…...

【前端】Vue中使用CKeditor作为富文本编辑器

官网https://ckeditor.com/ 此处记录一下我在使用的时候具体初始化的代码。 <template><div><textarea :id"id"></textarea></div> </template><script> export default {name: CkEditor,data: function () {return {id:…...

CSS篇-6

1. 如果将<html>元素的font-size设置为10rem&#xff0c;那么当用户调整或拖曳浏览器窗口时&#xff0c;其文本大小会受到影响吗&#xff1f; 不会受到影响。rem单位是相对于根元素&#xff08;即<html>元素&#xff09;的font-size计算的。一旦<html>的fon…...

【计算机系统结构】习题2

目录 1.有一条静态多功能流水线由5段组成&#xff0c;加法用1、2、4、5段&#xff0c;乘法用1、3、5段&#xff0c;第3段时间为&#xff0c;其余各段为&#xff0c;且流水线的输出可直接返回输入端或暂存器&#xff0c;若计算&#xff0c;试计算吞吐量、加速比、效率 2.有一动…...

用户资产化视角下开源AI智能名片链动2+1模式S2B2C商城小程序的应用研究

摘要&#xff1a;在数字化时代&#xff0c;平台流量用户尚未完全转化为企业的数字资产&#xff0c;唯有将其沉淀至私域流量池并实现可控、随时触达&#xff0c;方能成为企业重要的数字资产。本文从用户资产化视角出发&#xff0c;探讨开源AI智能名片链动21模式S2B2C商城小程序在…...