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

PG故障处理:PG归档空间耗尽案例分析

PG故障处理:PG归档空间耗尽案例分析

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

这个案例是PG环境中归档空间耗尽,导致PG数据库异常关闭的的一个案例,这个案例重点在于分享一下,怎么快速的去找到是什么SQL语句导致空间耗尽的。

1 故障现象

这里看到归档失败,No space left on device没有多余的空间。

2025-07-28 05:42:47.499 CST,,,1789,,6886966a.6fd,1,,2025-07-28 05:13:14 CST,,0,LOG,00000,"archive command failed with exit code 1","The failed archive command was: test ! -f /postgresql/archive/1721/000000080000002600000006 && cp pg_wal/000000080000002600000006 /postgresql/archive/1721/000000080000002600000006",,,,,,,"pgarch_archiveXlog, pgarch.c:589","","archiver",,0
2025-07-28 05:42:47.519 CST,,,4291,,68869ced.10c3,1,,2025-07-28 05:41:01 CST,5/1481,0,PANIC,53100,"could not write to file ""pg_wal/xlogtemp.4291"": No space left on device",,,,,"writing block 279403 of relation base/13025/65649
while scanning block 279435 of relation ""public.big_table""",,,"XLogFileInit, xlog.c:3426","","autovacuum worker",,0
2025-07-28 05:42:47.696 CST,,,1782,,68869669.6f6,6,,2025-07-28 05:13:13 CST,,0,LOG,00000,"server process (PID 4291) was terminated by signal 6: Aborted","Failed process was running: autovacuum: VACUUM ANALYZE public.big_table",,,,,,,"LogChildExit, postmaster.c:3770","","postmaster",,0

2 分析过程

2.1 确认空间消耗

[postgres@pgc ~]$ du -m /|sort -n
4166    /postgresql/pgdata/14/15/1721/base/41025
34399   /postgresql/pgdata/14/15/1721/base/13025
38600   /postgresql/pgdata/14/15/1721/base
44545   /postgresql/pgdata/14/15/1721/pg_wal
83346   /postgresql/pgdata
83346   /postgresql/pgdata/14
83346   /postgresql/pgdata/14/15
83346   /postgresql/pgdata/14/15/1721
112771  /postgresql/archive
112771  /postgresql/archive/1721
196194  /postgresql
199240  /

这里看到归档目录耗了100G左右。

2.2 按小时分析归档文件个数

注意PG中归档日志的大小跟Oracle有一些区别,归档文件在操作系统中的大小并不代码着实际消耗的大小。比如连续的switch wal,生成的归档日志文件大小都是跟wal一样的大的。

[postgres@pgc pgsql]$ sh ./archive_number_count.sh  /postgresql/archive/1721 
Date         Hour  Count    Size(MB)  
2025-07-27   05    1        512.00    
2025-07-28   05    83       42496.00  
2025-07-28   21    51       26112.00  
2025-07-28   23    2        1024.00  

2.3 分析wal的内容

这里随便选择一个归档日志来分析:

[postgres@pgc pgsql]$ sh ./archive_count_sql.sh /postgresql/archive/1721/000000080000002600000001Operation       RelFileNode               Count      Total_Bytes
LOG             1663/13025/65648          76056      7529544
INSERT          1663/13025/65649          2509865    358910695
FPI_FOR_HINT    1663/13025/65649          9          441
INSERT_LEAF     1663/13025/65655          2503007    160192448
SPLIT_R         1663/13025/65655          6882       5206752
INSERT_UPPER    1663/13025/65655          6858       493776

这里看到在1663/13025/65649上存在大量的insert操作,生成的日志大概是358910695。

3.4 查询对象及定位SQL语句

SELECTc.relfilenode,c.relname,n.nspname AS schema_name,CASE c.relkindWHEN 'r' THEN 'table'WHEN 'i' THEN 'index'WHEN 't' THEN 'TOAST'ELSE c.relkindEND AS reltype
FROMpg_class c
JOINpg_namespace n ON c.relnamespace = n.oid
WHEREc.relfilenode IN (65649, 65655);relfilenode |    relname     | schema_name | reltype
-------------+----------------+-------------+---------65649 | big_table      | public      | t65655 | big_table_pkey | public      | i

可以定位到对象信息。

[postgres@pgc log]$ grep -Ei 'big_table'  postgresql-2025-07-28_051314.csv
Query Text: INSERT INTO big_table (data1, data2, data3, data4)
Insert on public.big_table  (cost=0.00..12500000.00 rows=0 width=0) (actual time=1345310.410..1345310.412 rows=0 loops=1)Output: nextval('big_table_id_seq'::regclass), ""*SELECT*"".md5, ""*SELECT*"".md5_1, ""*SELECT*"".int4, ""*SELECT*"".""?column?""

定位到SQL语句

3 总结

上面只是简单的记录了如果快速的分析PG环境中归档日志耗尽,帮助我们快速的得到对应的对象和SQL语句,提升我们故障分析的效率。

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

http://www.jsqmd.com/news/33174/

相关文章:

  • 树莓派软路由wifi烧录pi3
  • 室内潮玩运动馆:特色项目/美味小吃/团建适配性权威指南
  • 12c RAC添加节点
  • 十五五规划释放AI产业新信号,边缘智能或成下一个风口
  • 2025 年锻钢阀源头厂家最新推荐排行榜:聚焦精工智造与节能减排,碳钢锻钢阀/手动锻钢阀/锻造钢阀/丝扣锻钢阀公司推荐
  • 2025年11月洗选煤成套设备厂家推荐排行榜前十强:山东鑫佳重工科技领衔
  • 揭秘MySQL优化器:为何索引在手却选择全表扫描?
  • manim边做边学--文字创建销毁的打字机效果
  • 2025年河北泵用挤压软管体验权威推荐:河北抽负压真空胶管清洁/河北抽真空胶管安装/河北真空侵胶管维护源头厂家精选
  • 2025年移动照明车灯塔工厂权威推荐:液压升降移动照明车/拖车式移动照明车/太阳能移动照明车源头厂家精选
  • 学习Hyperledger Fabric2.5
  • DHTMLX Gantt 9.1 的核心目标——在保持稳定性能的基础上,带来更智能的时间刻度优化、更灵活的任务渲染、更高效的实时协作能力及更完善的资源管理功能。
  • 量化选股与量化交易第857篇:通达信主升操盘 - Leone
  • 【中大厂前端】Java常见面试题 - 教程
  • 量化选股与量化交易第858篇:通达信擒龙三把锁 - Leone
  • 量化选股与量化交易第861篇:通达信绝杀大牛 - Leone
  • 国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
  • Python 机器学习02 - 常见分类算法
  • 系统基础文件属性(二)
  • 量化选股与量化交易第882篇:通达信量能趋势启动 - Leone
  • 量化选股与量化交易第883篇:通达信顶底雷达 - Leone
  • 量化选股与量化交易第878篇:通达信起爆点探测器 - Leone
  • 量化选股与量化交易第879篇:通达信强势反转战法 - Leone
  • 量化选股与量化交易第886篇:通达信收割机 - Leone
  • 量化选股与量化交易第888篇:通达信龙头趋势量化 - Leone
  • 量化选股与量化交易第889篇:通达信趋势拐点 - Leone
  • 【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程
  • 详细介绍:vue3和uniapp的生命周期
  • DMS Airflow:企业级数据工作流编排平台的专业实践
  • iOS HTTPS 抓包,从原理到落地排查的工程化方法(Charles / tcpdump / Sniffmaster)