0

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

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

表中的数据是我们用户体验的核心,尽管遵循这种方法是有意义的,但它会带走我们的用户期望在真空完整过程中看到的数据。

这里还有哪些其他选项可以缩小 pg_toast?

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

在此处输入图像描述 在此处输入图像描述

自动真空设置

在此处输入图像描述

该特定 pg_toast 当前正在运行的 autovacuum 进程的结果。它可能会有所帮助。 在此处输入图像描述

4

2 回答 2

2

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

臃肿的 TOAST 表对您来说是个问题吗?TOAST 表总是通过 TOAST 索引访问,因此膨胀不应该是性能问题。

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

为了防止问题变得更糟,您应该首先尝试将autovacuum_vacuum_cost_limit受影响的表提高到 2000,如果这不起作用,则降低autovacuum_vacuum_cost_delay到 0。您可以使用ALTER TABLE更改单个表的设置。

于 2018-12-05T04:22:43.420 回答
0

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

于 2020-05-12T11:40:04.653 回答