我有 10-15 个大表,5GB 到 30GB。其余的不到 1GB。一些表数据很大,每天会产生 500 000 个死元组。几乎 7 天后,当死元组超过 350 万时,autovacuum 开始。这个数据库有大约 60 个表。这里数据库的阈值为:20%。
我想将 autovacuum 阈值从 20% 更改为 1%。是否对系统性能有任何影响(因为对于较小的表,它会经常运行)。maintanance_work_mem 和 work_mem 参数值应该是什么?
我有 10-15 个大表,5GB 到 30GB。其余的不到 1GB。一些表数据很大,每天会产生 500 000 个死元组。几乎 7 天后,当死元组超过 350 万时,autovacuum 开始。这个数据库有大约 60 个表。这里数据库的阈值为:20%。
我想将 autovacuum 阈值从 20% 更改为 1%。是否对系统性能有任何影响(因为对于较小的表,它会经常运行)。maintanance_work_mem 和 work_mem 参数值应该是什么?
您可以更改单个表的 autovacuum 比例因子:
VACUUM
并不便宜,因此更频繁地运行它会占用更多资源。但是,由于VACUUM
通常在更频繁地调用时要做的工作更少,所以它并不像看起来那么糟糕。主要开销是每次VACUUM
运行都会扫描表上的所有索引,并且如果您更频繁地运行,工作不会减少VACUUM
(尽管 PostgreSQL v14 引入了一个优化,如果只需要删除很少的索引条目,则跳过索引扫描) .通常,即使对于大型表,也可以有标准的 20% 的膨胀。仅当您的目标是对该表进行有效的仅索引扫描时,才考虑增加频率。
您应该注意的主要事情是 autovacuum 在您的大桌子上足够快。为此,
maintenance_work_mem
调高(这样索引不必比必要的更频繁地扫描)并且可能减少autovacuum_vacuum_cost_delay
这些表。