【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)

news2024/11/17 1:37:35

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 pages
      	finished vacuuming "postgres.public.youli_testtable": index scans: 1
      	pages: 32 removed, 96 remain, 33 scanned (25.78% of total)
      	tuples: 4998 removed, 11226 remain, 0 are dead but not yet removable
      	removable cutoff: 57093, which was 1 XIDs old when operation ended
      	frozen: 0 pages from table (0.00% of total) had 0 tuples frozen
      	index scan needed: 33 pages from table (25.78% of total) had 4998 dead item identifiers removed
      	index "youli_testtable_id_idx": pages: 98 in total, 26 newly deleted, 53 currently deleted, 27 reusable
      	平均读取率:0.000 MB/s,平均写入率:0.000 MB/s
      	buffer usage: 458 hits, 0 misses, 0 dirtied
      	WAL 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

引言 call指令是转移指令,CPU执行call指令,进行两步操作: (1)将当前IP或当前CS和IP压入栈中 (2)转移。call指令不能短转移,除此之外,call指令转移的方法跟jmp指令的原理…

柔性超级电容器咋储能?生物聚合物在其中起啥作用?有啥挑战?

*本文只作阅读笔记分享* 一、引言 随着对化石燃料影响的日益关注,开发用于先进电化学能量存储设备的绿色和可再生材料变得至关重要。超级电容器因其出色的寿命、安全性和宽温度操作范围等优势而成为有前途的储能候选者。柔性超级电容器特别适合为轻质可穿戴电子设…

xss GAME (xss漏洞攻击1-8)

目录 xss网页链接 第一关 第二关 第三关 ​编辑第四关 ​编辑第五关 ​编辑第六关 第七关 第一种 Function构建函数 第二种 tostring parseInt 第三种 silce() ​编辑第八关(安全过滤框架 dom破坏) xss网页链接 XSS Game - Learning XSS Ma…

linux之网络子系统-GSO/TSO 源码分析

一、GSO/TSO GSO 目前在内核5.10.* 版本时,已经是合入主线,就是对TCP/UDP都支持并且在网络协议栈GSO功能是默认打开的。虽然可以通过ethtool -K 网卡名 gso off 关闭,但是在L3/L4还是走GSO逻辑,关不掉。我目前是没有找到内核源码…

NextJs - 服务端/客户端组件之架构多样性设计

NextJs - 服务端/客户端组件之架构多样性设计 前言一. 架构设计1.1 SSR流式渲染常见错误设计之 - 根页面同步阻塞1.2 架构设计之 - 客户端组件依赖于服务端组件数据① 使用 Redux 完成数据共享 1.3 架构设计之 - 单页内的分步骤跳转① 如何做到服务端组件和客户端组件之间的切换…

libevent之android与鸿蒙编译过程

背景 最近基于libevent开发了一个端侧的缓存代理库,先是基于macOS编译开发的,基本0问题,后来移植到鸿蒙与android时遇到一些编译链接问题。 libevent版本如下: 软件版本号libevent-2.1.8 android编译 编译环境 android studio…

EmguCV学习笔记

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 笔者的博客网址:https://blog.csdn.net/uruseibest 本教程将分为VB.Net和C#两个版本分别进行发布。 教程VB.net版本请…

Go Roadmap-Basics中文笔记

Go Roadmap-Basics 地址:https://roadmap.sh/golang 简介:Github star No.6 学习路线 Go 中译版 Learn the Basics Go特点:静态类型,运行速度快,编译语言,编译速度快,自动垃圾回收&#xff…

【2】初识JVM

目录 一.什么是JVM 二.JVM的功能 2.1即时编译 三.常见的JVM​编辑 ​编辑 总结​编辑 一.什么是JVM 二.JVM的功能 2.1即时编译 三.常见的JVM 总结

Spring MVC Controller返回json日期格式配置失效的解决办法

如题&#xff0c;Spring MVC 4.3.0版本&#xff0c;配置jackson读写json。Controller层方法返回值对象包含java.util.Date类型的属性&#xff0c;并且在applicationContext.xml中配置了jackson的日期格式&#xff1a; <mvc:annotation-driven><mvc:message-converters…

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机

现代化生产中&#xff0c;电子元件通常会使用自动化设备来进行生产&#xff0c;例如像PCB&#xff08;印刷电路板&#xff09;的组装。但是生产过程中也会面临一些问题&#xff0c;类似于如何解决在PCB板上牢固、精准地安装各种组件呢&#xff1f;IBL Lttechnik GmbH公司的CM80…

什么是OpenTiny?

OpenTiny 是一套企业级的 Web 前端开发解决方案&#xff0c;提供跨端、跨框架的 UI 组件库和低代码引擎&#xff0c;帮助开发者高效构建 Web 应用 。企业运用开发中&#xff0c;可以利用 OpenTiny 的以下核心组件和优势&#xff1a; TinyVue 组件库&#xff1a;一个丰富的组件库…

AWS boto3 脚本访问 AWS 资源

AWS boto3 脚本访问 AWS 资源 引言boto3主要功能常见用例安装和基本使用 boto3.Client() 低级客户端基本用法关键参数 boto3.resource() 高级客户端常见参数用法 boto3.resource VS boto3.client相似点不同点总结 关于身份验证凭证隐式身份凭证显式身份验证凭证assuem role如何…

对比各类 AWS MySQL 升级方案及原理

搞了好几个月的MySQL升级终于接近尾声&#xff0c;进入总结梳理阶段~ 本文主要对比升级期间用到的三种方案&#xff1a; 本地升级蓝绿升级API同步升级 对比项 \ 升级方式本地升级蓝绿升级API同步升级停机时间长&#xff0c;3-5分钟不可读写较短&#xff0c;约15秒实例变为只…

Delphi 实现JSON序列化和反序列化的功能以及源码探究

目录 一、JSON序列化和反序列化简介 二、Delphi序列化的两种方式 1、TJson的使用 2、TJsonSerializer的使用 3、使用注意事项 三、Delphi与GO序列化效率对比 1、GO语言JSON序列化方法 2、Delphi 与 GO 序列化效率对比 四、Delphi序列化源码初探 五、Delphi 序列化的优…

NGINX 之 location 匹配优先级

章节 1 NGINX 的源码安装 2 NGINX 核心配置详解 3 NGINX 之 location 匹配优先级 4 NGINX 基础参数与功能 目录 1 location 基础语法 1.1 location 语法说明表 1.2 URI部分简单介绍 2 location 匹配优先级 2.1 URI匹配的规则与顺序 2.2 精确匹配(location /1.txt) 2.3 区…

hutool发邮件功能如何配置SMTP服务器参数?

hutool发邮件的教程指南&#xff1f;hutool发邮件性能优化方法&#xff1f; Hutool作为一个轻量级的Java工具库&#xff0c;其邮件发送功能因其简单易用而受到广泛关注。AokSend将详细介绍如何通过配置SMTP服务器参数来实现Hutool发邮件的功能。 hutool发邮件&#xff1a;优势…

LinuxKernel开发

Linux Kernel简介 0. Linux历史 Linux内核&#xff08;英語&#xff1a;Linux kernel&#xff09;是一种开源的类Unix操作系统宏内核。整个Linux操作系统家族基于该内核部署在传统计算机平台&#xff08;如个人计算机和服务器&#xff0c;以Linux发行版的形式[7]&#xff09;…

【Unity实战】NavMeshAgent实现Strafe固定朝向移动

众所周知&#xff0c;NavMeshAgent一旦设定了destination&#xff0c;它就会直奔目标。但是在一些场景中&#xff0c;比如NPC是个射手&#xff0c;除了瞄准玩家&#xff0c;也需要走位。如果不加以处理&#xff0c;我们恐怕会遇见瞄准IK和朝向…难以言表的表现&#xff0c;直接…

达梦数据库的系统视图v$datafile

达梦数据库的系统视图v$datafile 达梦数据库的V$DATAFILE 是一个重要的系统视图&#xff0c;提供了有关数据库数据文件的信息。 V$DATAFILE 系统视图 V$DATAFILE 视图用于显示数据库中每一个数据文件的详细信息。通过查询这个视图&#xff0c;数据库管理员可以了解数据文件的…