Postgres - 如何检查可以恢复多少操作系统空间

问题描述 投票:0回答:1

我有一个巨大的表,其中正在进行大量删除。 我时不时地通过执行下面的命令来清理表以将一些空间恢复到系统中

  VACUUM FULL VERBOSE ANALYSE table_name

我知道 autovacuum 应该可以完成这项工作,但随着时间的推移,我看不到任何空间使用量的减少。 全真空显然是一个相当漫长的过程,有时我意识到这不值得付出努力,因为我只恢复了免费演出。其他时候我可以得到十几个空间

所以我想知道是否有任何方法可以在 Postgres 中检查在进行任何操作之前可以将多少空间释放回操作系统/哪些表需要清理

我使用的是12版本。

**** 编辑****

简而言之,我需要粗略估计吸尘后可以收回的浪费空间。

postgresql postgresql-12
1个回答
2
投票

我不确定“释放回操作系统”。

但是为了粗略估计浪费的空间,我会这样做:

SELECT 
        schemaname , relname , 
        pg_total_relation_size(relid) AS total_size,
        n_live_tup , n_dead_tup , 
        n_dead_tup * 100.0 / 
        CASE n_live_tup WHEN 0 THEN 1 ELSE n_live_tup END  AS dead_ratio,
        pg_total_relation_size(relid)::numeric * n_dead_tup  / CASE n_live_tup WHEN 0 THEN 1 ELSE n_live_tup END AS wasted_space
    FROM 
        pg_catalog.pg_stat_all_tables 
    WHERE
        schemaname = 'public'
    ORDER BY 
        wasted_space DESC;
架构名称 相关名称 总大小 n_live_tup n_dead_tup 死亡比率 浪费空间
公开 页面提取 409575424 92428 5831 6.3086943350499849 25838861
公开 注释_类型 761856 1 6 600.0000000000000000 4571136
公开 doc_dflt 38010880 15789 1120 7.0935461397175249 2696319
公开 215359488 215567 1650 0.76542327907332755014 1648411
公开 文件 17784832 12995 1027 7.9030396306271643 1405542

逻辑:

  • 获取死元组的比例
  • 乘以关系大小

当然这是一个非常粗略的估计,实际结果会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.