PostgreSQL无大表却占用108G,能否收缩清理该数据库?
PostgreSQL磁盘占用异常排查:表小但目录占用大的原因
以下是你可能遗漏的几个关键排查方向:
未清理的WAL事务日志
检查data目录下的pg_wal文件夹,若WAL文件未及时归档或清理(比如归档配置失效、wal_keep_segments设置过大),会大量占用磁盘空间。
执行命令查看占用:du -sh /var/lib/pgsql/13/data/pg_wal ls -lh /var/lib/pgsql/13/data/pg_wal | wc -l临时文件残留
大查询、排序或哈希操作生成的临时文件,若进程异常终止可能残留。检查base/pgsql_tmp目录:du -sh /var/lib/pgsql/13/data/base/pgsql_tmp表/索引膨胀(普通VACUUM无法释放空间)
普通VACUUM仅标记死元组可复用,不会将空间归还操作系统。若表或索引存在严重膨胀,需在业务低峰执行VACUUM FULL(注意锁表)。
用SQL查询膨胀率:SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) AS total_size, round((1 - (pg_relation_size(relid) / pg_total_relation_size(relid)::numeric)) * 100, 2) AS bloat_percent FROM pg_stat_user_tables ORDER BY pg_total_relation_size(relid) DESC;大对象(Large Objects)占用
若使用过lo_create等大对象功能,这些数据存储在pg_largeobject中,普通表空间统计不会包含。查询总大小:SELECT pg_size_pretty(sum(pg_relation_size(loid::regclass))) AS total_large_object_size FROM pg_largeobject_metadata;旧数据库残留文件
检查base目录下的文件夹OID,对比pg_database中的数据库OID,删除不属于现有数据库的残留文件夹(操作前务必备份)。
内容的提问来源于stack exchange,提问作者Amri Raed
相关产品推荐
相关产品推荐

