PG server 磁盘空间占满问题的处理方法 | 运维进阶
【作者】泊涯,公司分部测试经理,集团公司技术专家成员之一,目前主要在客户现场做银行系统的性能诊断分析优化和测试管理工作。
前段时间客户运维人员报生产环境批处理数据库环境出问题,没办法正常运行,于是登录他们服务器,查看了PG日志文件,发现原来是磁盘空间满的原因:
接下来直接df -Th ,看到是home空间满,而我是将PG的data文件都存在在home目录下,那应该是PG的数据文件空间占满了,但是系统才运行2年,磁盘空间配置将近900G,一下子就占满了,肯定是某个程序代码突发性引起的。因为系统运行2年多一直没出问题,而且前几天有查看总的磁盘空间占用还不到30G。
经开发人员分析,确实是批处理语法出了问,题引起的一个特殊条件比较隐秘性的BUG。
接下来的首要问题,是定位哪张表出了问题,并解决磁盘空间缩减问题,使系统正常启动运行。
通过定位分析是某张报表数据量占用空间导致磁盘空间占满,21亿笔数据。如下:
查看分析,确实是这张表占用了783G的空间导致的。
问题处理第一步:
通过对PG数据库进行回收垃圾方式,看是否能回收部分,结果无法正常回收。然后再想通过重启数据库方式,看能不能释放下空间,结果无法正常启动了。
迫不得己,只好申请临时加一块1T的硬盘,然后重新修改配置,再启动数据库,进行数据删除与恢复。
因日常都有做备份工作,接下来只需把对应的表数据恢复到前一天的数据。
之前没经验,所以先把该表直接Drop表重建,然后重建索引,再进行数据导入。
问题得到解决:
总结: 本次碰到的问题出现过两次,第一次以为是系统故障问题引起的,当时通过清理磁盘部分多余空间,然后对该表中脏数据进行清理剩下几十万笔数据,但是发现表空间和索引空间都没释放。原因是使用DELETE方式来逻辑删除表数据,但是空间是不释放的,于是重新命名了该表名称,然后重建该表,再复制数据,用drop方式删除旧表和索引,磁盘空间最终才得以释放。 备注: 当DELETE后面跟条件的时候,就会出现删除数据后,数据表占用的空间大小不会变。
原题:PG server磁盘空间占满问题处理如有任何问题,可点击文末阅读原文,到社区原文下评论交流 觉得本文有用,请转发或点击“在看”,让更多同行看到
资料/文章推荐:
欢迎关注社区 "PostgreSQL" 技术主题 ,将会不断更新优质资料、文章,您也可以前往提出疑难问题,与同行切磋交流。地址:https://www.talkwithtrend.com/Topic/112101
下载 twt 社区客户端 APP
长按识别二维码即可下载
或到应用商店搜索“twt”
长按二维码关注公众号
*本公众号所发布内容仅代表作者观点,不代表社区立场