我在Postgresql 9.3上。
我有一张怪异的pg_toast表pg_toast_675632
,占用了27 GB。
除非我误解,否则此pg_toast_675632
非常大,因为我在json
与pg_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.
VACUUM (FULL)
? 我知道pg_toast_675632
需要很长时间,并且会在持续时间内锁定VACUUM FULL pg_toast_675632
。
my_table
有哪些风险?这是否等同于锁定pg_toast-675632
,因为这是与check the render method of 'Nimbus'
相关的内容?答案 0 :(得分:1)
正确的autovacuum不会回收空间。
您必须在VACUUM (FULL)
上运行my_table
,这也将释放TOAST表中的空间。
缺点是ACCESS EXCLUSIVE
锁定会在VACUUM (FULL)
运行时阻止所有并发活动。
作为超级用户,可以直接在TOAST表上运行VACUUM
,但我看不到优势。