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

【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这张表查看每一个数据库的oid

    select 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.部分参考链接

  1. https://blog.csdn.net/weixin_48154829/article/details/134382728
  2. 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)构造地址字典目录扫描探针编辑器目录构造地址(编辑器目录一般是默认的&#xff09…...

云原生日志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、…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

英国云服务器上安装宝塔面板(BT Panel)

在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...