暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

postgresql数据库表空间目录大小与数据库总大小之和不一致

最近遇到个很奇怪的问题,如标题所示。在文件系统上du -sh 表空间目录的大小是5T,在数据库里查所有的表+索引使用的存储是1.5T。

这多出来的3.5T不知道干什么的,在内外网找了半天没找到原因。基本都是表膨胀的问题。

最后还是同事说了一件事,原来在我来之前的二十天前该库的数据目录曾经占满过,因为一条sql,原因未知。后来业务清理了一些东西,数据库恢复以后就把表删了。但是表的元数据没有自动清理,似乎触发了什么bug。

现在这个表有三千多个元数据文件。

ps:relpages*8是因为这个字段是页数量,pg中一页是8K。


ps:这样统计有问题,如果统计信息没更新的话,可能不准。

有需要可以用这个命令看 可能有点慢。

SELECT pg_size_pretty(pg_relation_size(pg_class.oid)), pg_class.relname, pg_namespace.nspname, CASE pg_class.relkind WHEN 'r' THEN 'table' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 'v' THEN 'view' WHEN 't' THEN 'TOAST' ELSE pg_class.relkind::text END FROM pg_class LEFT OUTER JOIN pg_namespace ON (pg_namespace.oid = pg_class.relnamespace) ORDER BY pg_relation_size(pg_class.oid) DESC;

relpages是有多少个数据页。





现在考虑的方案有三个

1.全库执行vacuum full,不确定有没有用。

2.将全库pg_dump备份,再将所有1524526文件删除,有一定的风险。

3.全库pg_dump备库,再重建库恢复。代价大,麻烦。


这种情况是“孤儿文件”,具体原因看这个链接https://www.cnblogs.com/abclife/p/13948101.html

怎么查出来看这个链接https://mp.weixin.qq.com/s/N-NCa9pVoQde5EcuFqiP_g

本次现场环境用的是第二个方法,没有出现问题。但还是提醒一下,做好备份。数据无价。

最后修改时间:2024-11-05 12:02:09
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论