2017-02-03 53 views
0

我在Postgresql 9.3上。pg_toast表自动清理后大小没有减小

我有一个怪异的pg_toast表,pg_toast_675632,占用27 GB。

除非我误解,这pg_toast_675632是如此之大,因为我曾在数据表中的大json列的pg_toast_675632有关,my_table。所以我大量简化了json的my_table(即从100个元素的json降到2-5个元素)。但是,自动清理后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有什么关系?

回答

1

正确的自动清理不会回收空间。

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

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

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

+0

完美运作。谢谢你的解释。 – BigRon