【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)
1.一直以来想写下基于
PostgreSQL的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。
2.熟悉、梳理、总结下PostgreSQL数据库相关知识体系。空间膨胀(主键、外键、索引,增加删除等操作更新频繁)、磁盘爆满(回收机制不生效或不及时)、应用宕机(应用跟PG空间波动较大的数据库安装在同一台服务器)
3.欢迎批评指正,欢迎关注,跪谢一键三连!
文章目录
- 1.`Linux`磁盘空间异常增加--问题定位排查
- 2.`PostgreSQL`目录结构
- 2.1 `PostgreSQL`一级目录下内容
- 2.2 `PostgreSQL`二级目录data路径下内容
- 3.常用问题排查命令
- 4.`PostgreSQL`数据库所有表及数据库目录
- 5.部分参考链接
1.Linux磁盘空间异常增加–问题定位排查
- 如单日增加
100-200GB,问题排查步骤:查找最近更新文件 --> 找到对应组件 --> 发现PG数据目录下增加文件(根据经验怀疑是PG数据表频繁更新,回收机制异常问题导致)
2.PostgreSQL目录结构
2.1 PostgreSQL一级目录下内容
-
一级路径文件夹 路径下存储的内容 /bin 包含PostgreSQL可执行文件,如psql和其他实用程序。 /data 存数据文件的常见目录,包括主数据库集群。包含诸如base等子目录,其中存储实际的表数据。 /lib 包含PostgreSQL所需的共享库。 /share 可能包含如错误消息、时区信息和其他共享资源等文件。 /doc 文档文件 /include 编译与PostgreSQL交互的程序所需的头文件。 PostgreSQL安装路径下详情如下图所示:

2.2 PostgreSQL二级目录data路径下内容
-
二级路径文件夹或文件 路径下存储的内容 base/ 存储数据库的基本数据文件。每个数据库都有以 OID(对象标识符)命名的子目录,包含该数据库所有表和索引的数据文件。 global/ 包含全局性质的系统表空间文件。存放所有数据库共享的系统表,如 pg_database、pg_authid 等。 pg_tblspc/ 包含表空间的符号链接。每个符号链接指向实际的表空间目录,表空间是用于组织数据库物理存储的一种方式。 pg_twophase/ 包含两阶段提交中使用的文件。两阶段提交用于确保分布式事务的一致性。 pg_stat_tmp/ 包含一些临时文件,用于存储统计信息 pg_stat/ 包含PostgreSQL收集的统计信息文件。这些文件记录数据库服务器运行时的性能统计信息,如查询计划、锁等。 pg_logical/ 包含用于逻辑复制的文件。逻辑复制允许将特定表、特定数据库对象或特定的数据更改复制到另一个数据库。 pg_replslot/ 包含复制插槽信息的文件。复制插槽用于流复制中,确保备用节点能够持续接收主节点的 WAL(Write-Ahead Logging)。 pg_subtrans/ 包含用于存储子事务信息的文件。子事务用于处理并发事务中的多个子操作。 pg_notify/ 包含用于存储异步通知信息的文件。异步通知允许数据库中的一个会话通知其他会话有关特定事件的发生。 pg_snapshots/ 包含用于存储快照信息的文件。快照是一种数据库的一致性视图,用于支持可重复读事务隔离级别。 pg_serial/ 包含用于存储序列信息的文件。序列是 PostgreSQL 中生成唯一标识符的一种方式。 postgresql.conf 存放PostgreSQL服务器的配置参数,如端口号、日志设置等。 pg_hba.conf 存放PostgreSQL的身份验证规则,定义哪些主机和用户能够连接到数据库,以及使用哪种身份验证方法。 pg_ident.conf 存放标识映射规则,用于将操作系统用户映射到 PostgreSQL 数据库用户。 data/路径下详情如下图所示:

3.常用问题排查命令
- 查找大小大于
1GB的文件find /path/to/search -type f -size +1G - 使用find命令结合mtime选项来找到最近更新的文件
find . -type f -mtime -1 - 查看每个文件夹的占用空间
du -sh * # du 是磁盘使用情况的缩写。 # -s 参数表示汇总每个参数的总用量。 # -h 参数表示以易读的格式(例如 KB、MB、GB)显示大小。 # * 表示当前目录下的所有文件和文件夹。# 查看所有子目录的大小,并按大小排序 du -h --max-depth=1 | sort -hr
4.PostgreSQL数据库所有表及数据库目录
-
4.1 获取当前
PostgreSQL中所有的表信息select * from pg_tables
-
4.2 显示数据目录
show data_directory
-
4.3 查看
pg_database这张表查看每一个数据库的oidselect oid,datname from pg_database
oid对应的文件存储路径详情如下图所示:

-
4.4 查询某张表的存储位置
-- 如:查询表'youli_testtable'的数据文件 select pg_relation_filepath('youli_testtable');
-
4.5 查看该表的数据操作审计日志(查看某张表的增加原因)
-- 编辑PostgreSQL的配置文件postgresql.conf,开启审计功能 -- audit_logging = 'on', -- 新版本为: logging_collector = on,如下查询命令可能不再适用 SELECT * FROM pg_audit_log WHERE obj_name = 'your_table' AND action = 'INSERT'; -
4.6 查询服务器进程同时详细描述与之关联的用户会话和查询
select * from pg_stat_activity;
-
4.7 清除表的碎片(耗时非常长慎用!)
vacuum full youli_testtable;
-
4.8 不回收空间只标记
vacuum youli_testtable;
- 自带清理执行详情如下图所示:

- 自带清理执行详情如下图所示:
-
4.9
vacuum verbose public.youli_testtable执行结果及执行日志vacuum作用范围可以是整张表,清理过期元组及索引项,并且不阻塞读和写。- 执行结果前后数据表大小对比

- 执行日志详情
vacuuming "postgres.public.youli_testtable"table "youli_testtable": truncated 128 to 96 pagesfinished vacuuming "postgres.public.youli_testtable": index scans: 1pages: 32 removed, 96 remain, 33 scanned (25.78% of total)tuples: 4998 removed, 11226 remain, 0 are dead but not yet removableremovable cutoff: 57093, which was 1 XIDs old when operation endedfrozen: 0 pages from table (0.00% of total) had 0 tuples frozenindex scan needed: 33 pages from table (25.78% of total) had 4998 dead item identifiers removedindex "youli_testtable_id_idx": pages: 98 in total, 26 newly deleted, 53 currently deleted, 27 reusable平均读取率:0.000 MB/s,平均写入率:0.000 MB/sbuffer usage: 458 hits, 0 misses, 0 dirtiedWAL usage: 184 records, 0 full page images, 41742 bytes系统用法:CPU:用户:0.00 s,系统:0.00 s,已用时间:0.00 s
-
4.10 其他参考命令
-- 清理并分析所有数据库 vacuumdb -a -z -v-- 并行清理并分析所有数据库,如开4个并行 vacuumdb -a -z -j 4 -v-- 只分析特定的数据库,如分析youli vacuumdb --analyze-only -d youli -v
5.部分参考链接
- https://blog.csdn.net/weixin_48154829/article/details/134382728
- https://www.cnblogs.com/jonvy/p/16367769.html
相关文章:
【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)
1.一直以来想写下基于PostgreSQL的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下PostgreSQL数据库相关知识体系。空间膨胀(主键、外键、…...
C语言第20天笔记
文件操作 概述 什么是 文件 文件时保存在外存储器上(一般代指磁盘,也可以是U盘、移动硬盘等)的数据的集合。 文件操作体现在哪几个方面 1. 文件内容的读取 2. 文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&a…...
为什么穷大方
为什么有些人明明很穷,却非常的大方呢? 因为他们认知太低,根本不懂钱的重要性,总是想着及时享乐,所以一年到头也存不了什么钱。等到家人孩子需要用钱的时候,什么也拿不出来,还到处去求人。 而真…...
HiveSQL实战——大数据开发面试高频SQL题
查询每个区域的男女用户数 0 问题描述 每个区域内男生、女生分别有多少个 1 数据准备 use wxthive; create table t1_stu_table (id int,name string,class string,sex string ); insert overwrite table t1_stu_table values(4,张文华,二区,男),(3,李思雨,一区,女),(1…...
RabbitMQ集群 - 普通集群搭建、宕机情况
文章目录 RabbitMQ 普通集群概述集群搭建数据准备启动容器宕机情况 RabbitMQ 普通集群 概述 1)普通模式中所有节点没有主从之分,所有节点的元数据(交换机、队列、绑定等)都是一致的. 例如只要有任意一个节点上面 新增交换机&…...
xssDOM型练习
文章目录 例1要求 例2代码解析方法 例3例4例5例6例7例8 例1 本题通过get接收并传递参数,所有参数不经过过滤直接放入h2标签里面。 要求 1.需要页面弹出1337 2.不能与用户交互 官方认为innerHTML中script标签不安全,所以将其禁用,但只禁用了…...
python中的gradio使用麦克风时报错
python中的gradio使用麦克风时报错 当运行至 import gradio as gr with gr.Blocks() as demo:with gr.Tab("microphone transcriber"):gr.Audio(source"microphone", type"numpy", streamingTrue)demo.queue()##访问链接 https://ip:1235/demo…...
Oracle(63)什么是临时表(Temporary Table)?
临时表(Temporary Table)是一种特殊类型的表,用于存储临时数据,这些数据在会话期间或事务期间是短暂的。临时表在不同的数据库系统中都有实现,但功能和特性可能有所不同。临时表通常用于存储中间计算结果、临时数据处理…...
《Techporters架构搭建》-Day06 国际化
什么是国际化? 国际化,也叫i18n,为什么叫i18n呢? "i18n"是国际化(internationalization)的缩写,数字18代表了国际化这个单词中间的字母数量。类似这样的缩写还有k8s(kube…...
Linux ACL 访问控制
今天给伙伴们分享一下Linux ACL 访问控制,希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步…...
hg transformers pipeline使用
什么是hg transformers pipeline? 在Hugging Face的transformers库中,pipeline是一个高级API,它提供了一种简便的方式来使用预训练模型进行各种NLP任务,比如情感分析、文本生成、翻译、问答等。通过pipeline,你可以在几行代码内…...
高性能内存对象缓存
Memcached概述 一套开源的高性能分布式内存对象缓存系统 所有的数据都存储在内存中 支持任意存储类型的数据 提高网站的访问速度 数据存储方式与数据过期方式 数据存储方式:Slab Allocation 按组分配内存,每次先分配一个Slab,相当于一个大小为1M的页&…...
文件上传-CMS文件上传分析
黑盒思路: 上传点抓包测试 个人用户中心是否存在文件上传功能后台管理系统是否存在文件上传功能字典目录扫描探针文件(eg:upload.php)构造地址字典目录扫描探针编辑器目录构造地址(编辑器目录一般是默认的)…...
云原生日志Loki
1. Loki简介 1.1 Loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签…...
初阶数据结构之直接选择排序和快速排序
直接选择排序 1.在元素集合 array[i]–array[n-1] 中选择关键码最⼤(⼩)的数据元素 2.若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后⼀个(第⼀个)元素 交换 3.在剩余的 array[i]–array[n-2](array[i1]–…...
Java语言程序设计——篇十三(4)
🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…...
低代码: 组件库测试之渲染和元素获取,触发事件,更新表单,验证事件以及异步请求
组件库测试步骤 渲染组件(怎样将一个组件渲染到测试用例里面) mount 和 shallowMount传递属性元素是否成功的显示 查找元素的不同写法get, getAllfind, findAllfindComponent 和 getComponent触发事件(是click也好,是input也好,让它触发对应的事件) trigger 方法观察测试界面…...
银河麒麟服务器操作系统Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤
银河麒麟服务器操作系统 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤 一、准备工作1. 下载ISO镜像2. 制作安装介质3. 设置BIOS 二、安装过程1. 启动系统2. 选择安装语言3. 选择安装配置4. 配置root密码与创建用户5. 开始安装6. 重启系统7. 同意许可协议 三、系…...
2024年电赛H题全开源
当题目出来的的那一刻,看到了M0芯片,我们实验室只有一块板子,并且我没有接触过M0,电赛只准备了TI的MSP430f5529。但是我并没有放弃,决然的选择了H题。基本上将四问全做出来,可是测试由于使用了感为科技的寻…...
Docker:宿主机可以ping通外网,docker容器内无法ping通外网之解决方法
问题描述 1、宿主机可以ping外网,docker容器内无法ping外网 ping www.baidu.com 提示:unknown host baidu.com 2、宿主机可以wget下载,docker容器内无法wget下载 wget www.baidu.com 提示:unknown host baidu.com 解决方法 1、…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
