我有一个 Postgres 9.6 RDS 实例,它每天增长 1GB。我们对与 pg_toast 相关的关系做了一些优化,但 pg_toast 的大小没有改变。
Autovacuum 已打开,但由于 autovacuum/VACUUM FREEZE 不回收空间并且 VACUUM FULL 进行独占锁定,我不确定最好的方法是什么。
表中的数据是我们用户体验的核心,尽管遵循 this方法是有道理的,它会带走我们的用户期望在 vacuum full 过程中看到的数据。
这里还有哪些其他选项可以缩小 pg_toast?
这里是一些关于 table 大小的数据。您可以在前两张图片中看到,关系 scoring_responsescore
是与 pg_toast 关联的关系。
Autovacuum 设置
当前为特定 pg_toast 运行的 autovacuum 进程的结果。它可能会有所帮助。
最佳答案
VACUUM (FULL)
是 PostgreSQL 提供的唯一减少表大小的方法。
臃肿的 TOAST 表对您来说是这样的问题吗? TOAST 表始终通过 TOAST 索引访问,因此膨胀不应该是性能问题。
我知道有两个项目仅使用一个短的ACCESS EXCLUSIVE
锁提供表重组,即pg_squeeze和 pg_repack ,但您可能无法在 Amazon RDS 数据库中使用它们。
为了防止问题变得更糟,您应该首先尝试将受影响的表的 autovacuum_vacuum_cost_limit
提高到 2000,如果这不起作用,请降低 autovacuum_vacuum_cost_delay
到 0。您可以使用 ALTER TABLE
更改单个表的设置。
关于database - 在 RDS 实例上收缩 pg_toast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624270/