You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:00:58