在RDS实例上收缩pg_toast

时间:2018-12-05 02:24:55

标签: database postgresql amazon-rds vacuum autovacuum

我有一个Postgres 9.6 RDS实例,并且每天增长1GB。我们对与pg_toast相关的关系做了一些优化,但是pg_toast的大小没有改变。

Autovacuum已打开,但是由于autovacuum / VACUUM FREEZE不会回收空间,而VACUUM FULL会进行独占锁定,因此我不确定最好的方法是什么。

表中的数据是我们用户体验的核心,尽管遵循this方法是有道理的,但它会带走用户希望在真空满负荷过程中看到的数据。

缩小pg_toast的其他方法有哪些?

以下是有关表大小的一些数据。您可以在前两个图像中看到关系scoring_responsescore是与pg_toast关联的关系。

enter image description here enter image description here

自动真空设置

enter image description here

该特定pg_toast当前正在运行的自动真空处理结果。这可能会有所帮助。 enter image description here

2 个答案:

答案 0 :(得分:1)

VACUUM (FULL)是PostgreSQL提供的减少表大小的唯一方法。

TO肿的TOAST桌对您来说是一个问题吗?始终通过TOAST索引访问TOAST表,因此膨胀不会是性能问题。

我知道有两个项目提供的表重组仅带有短的ACCESS EXCLUSIVE锁,即pg_squeezepg_repack,但是您可能无法在Amazon中使用它们RDS数据库。

为使问题不再恶化,您应该首先尝试将受影响的表的autovacuum_vacuum_cost_limit升高到2000,如果这样做不成功,请将autovacuum_vacuum_cost_delay降低到0。使用ALTER TABLE更改单个表的设置。

答案 1 :(得分:0)

pg_repack仍然不允许减小RDS中TOAST Segments的大小。 在RDS中,我们无法使用超级用户权限运行pg_repack,我们必须使用“ --no-superuser-check”选项。有了它,它将无法访问pg_toast。*表。