She*_*sib 1 postgresql postgresql-performance postgresql-13
我有10-15个大表,5GB到30GB。其余的都小于1GB。有些表数据很大,每天会产生 500 000 个死元组。大约 7 天后,当死亡元组超过 350 万个时,自动清理就会开始。该数据库大约有 60 个表。这里数据库的阈值是:20%。
我想将 autovacuum 阈值从 20% 更改为 1%。对系统性能有什么影响(因为对于较小的表,它会频繁运行)。maintanance_work_mem 和 work_mem 参数值应该是什么?
您可以更改单个表的 autovacuum 比例因子:
ALTER TABLE tab SET (autovacuum_vacuum_scale_factor = 0.01);
Run Code Online (Sandbox Code Playgroud)
VACUUM并不便宜,因此更频繁地运行它会占用更多资源。然而,由于VACUUM频繁调用时通常要做的工作较少,因此情况并不像看起来那么糟糕。主要开销是每次VACUUM运行都会扫描表上的所有索引,并且如果运行VACUUM更频繁,这项工作并不会减少(尽管 PostgreSQL v14 引入了一种优化,如果只需要删除很少的索引条目,则可以跳过索引扫描) 。
通常,即使对于大表,标准的 20% 膨胀也可以。仅当您的目标是对该表进行高效的仅索引扫描时,才考虑增加频率。
您应该注意的主要事情是 autovacuum 在您的大桌子上足够快。为此,请maintenance_work_mem调高(以便不必比必要时更频繁地扫描索引),并且可能会减少autovacuum_vacuum_cost_delay这些表的索引。
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |