【问题标题】:pg_toast table not reduced in size after autovacuumpg_toast 表在 autovacuum 后没有减小
【发布时间】:2017-02-03 15:21:18
【问题描述】:

我使用的是 Postgresql 9.3。

我有一个巨大的 pg_toast 表,pg_toast_675632,占用 27 GB。

除非我误会,否则这个pg_toast_675632 如此之大是因为我在数据表中有一个很大的json 列与pg_toast_675632 相关,my_table。所以我在my_table 中大量简化了 json(即从 100 个元素的 json 到 2-5 个元素)。但是,在 autovacuum 之后,pg_toast_675632 仍然是 27 GB。这是因为 autovacuum 不会将回收的空间返回到磁盘吗? See the 3rd paragraph of 23.1.2 at this link.

  1. 那么根据上面链接中的文档,我需要手动运行VACUUM (FULL) pg_toast_675632吗?

我知道VACUUM (FULL) 需要很长时间,并且会在此期间锁定pg_toast_675632 以防写入。

  1. VACUUM FULL pg_toast_675632有什么风险?这是否等同于锁定 my_table,因为这就是 pg_toast-675632 的相关内容?

【问题讨论】:

    标签: postgresql vacuum autovacuum


    【解决方案1】:

    正确的 autovacuum 不会回收空间。

    您必须在 my_table 上运行 VACUUM (FULL),这也会释放 TOAST 表中的空间。

    缺点是ACCESS EXCLUSIVE 锁会在VACUUM (FULL) 运行时阻止所有并发活动。

    作为超级用户,您可以直接在 TOAST 表上运行 VACUUM,但我没有看到优势。

    【讨论】:

    • 效果很好。谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多