1

我在 Postgresql 9.3 上。

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

除非我有误解,否则它pg_toast_675632是如此之大,因为我json在数据表中有一个大的列pg_toast_675632my_table. 所以我大量简化了 json my_table(即从 100 个元素的 json 到 2-5 个元素)。但是,在 autovacuum 之后pg_toast_675632仍然是 27 GB。这是因为 autovacuum 不会将回收的空间返回到磁盘吗?请参阅此链接中 23.1.2 的第 3 段。

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

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

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

1 回答 1

1

正确的 autovacuum 不会回收空间。

您必须继续运行VACUUM (FULL)my_table这也将释放 TOAST 表中的空间。

The downside is the ACCESS EXCLUSIVE lock that will prevent all concurrent activity while VACUUM (FULL) runs.

As superuser you can run VACUUM on a TOAST table directly, but I don't see the advantage.

于 2017-02-03T15:43:46.350 回答