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.
- 所以根据上面的文档 link 我需要手动 运行
VACUUM (FULL) pg_toast_675632
?
我知道 VACUUM (FULL)
需要很长时间,并且会在这段时间内锁定 pg_toast_675632
以防止写入。
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 上,但我看不出有什么好处。
我正在使用 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.
- 所以根据上面的文档 link 我需要手动 运行
VACUUM (FULL) pg_toast_675632
?
我知道 VACUUM (FULL)
需要很长时间,并且会在这段时间内锁定 pg_toast_675632
以防止写入。
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 上,但我看不出有什么好处。