autovacuum

时间:2017-02-03 15:21:19

标签: postgresql vacuum autovacuum

我在Postgresql 9.3上。

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

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

  1. 基于上述链接的文档,我是否需要手动运行VACUUM (FULL)
  2. 我知道pg_toast_675632需要很长时间,并且会在持续时间内锁定VACUUM FULL pg_toast_675632

    1. my_table有哪些风险?这是否等同于锁定pg_toast-675632,因为这是与check the render method of 'Nimbus'相关的内容?

1 个答案:

答案 0 :(得分:1)

正确的autovacuum不会回收空间。

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

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

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