pg_toast table 在 autovacuum 后大小没有减小

pg_toast table not reduced in size after autovacuum

我正在使用 Postgresql 9.3。

我有一个巨大的pg_toasttable,pg_toast_675632,占用27GB.

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

  1. 所以根据上面的文档 link 我需要手动 运行 VACUUM (FULL) pg_toast_675632?

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

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

正确的 autovacuum 不会回收 space。

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

缺点是 ACCESS EXCLUSIVE 锁会阻止所有并发的 activity 而 VACUUM (FULL) 运行s.

作为超级用户,您可以 运行 VACUUM 直接在 TOAST table 上,但我看不出有什么好处。