如何使 Postgres autovacuum 不影响性能?

Hen*_*ley 5 postgresql

我遇到了 Postgres autovacuum 进程干扰数据库整体性能的问题。它使我的选择、插入和更新查询比平时慢。哪些设置和优化策略可以使 autovacuum 对我的数据库性能的影响较小?

有没有办法让它不消耗尽可能多的内存/CPU,以便客户端查询可以更有效地运行?

小智 8

很少有基本要点可以减轻您的恐惧。

  1. 运行 autovaccum 最终会提高查询的性能。这不会损害性能。这是因为 autovaccum 对表中的死元组进行垃圾收集。所以查询需要扫描较少数量的元组。在您的问题中,不清楚您是如何分析 autovaccum 造成性能问题的。如果可能,请提供详细信息。

  2. Postgres 中的 Autovaccum 算法/逻辑在新版本中不断改进。例如,版本 9.2 收到了一个补丁,用于在有锁的情况下跳过表。所以 autovaccum 在处理膨胀方面会做得更好。进一步改进此逻辑以跳过具有锁的块。在最新版本 9.6(正在开发)中收到一个补丁,可以完全跳过所有元组已经冻结的所有块。罗伯特·哈斯 (Robert Hass) 最近对此发表了评论:http : //rhaas.blogspot.in/2016/03/no-more-full-table-vacuums.html

  3. 您可能想要微调 autovaccum 相关参数以适合您的系统。如果可能,请寻求 DBA 专家的帮助。每个参数在 Postgres 文档中都有很好的记录:http : //www.postgresql.org/docs/9.5/static/runtime-config-autovacuum.html

所以关于你的问题:“有没有办法让它不消耗尽可能多的内存/CPU,以便客户端查询可以更有效地运行?”

答案是肯定的。通过微调上述链接中提到的参数,您可以为您的系统获得最佳效果

一般建议是始终升级到 PostgreSQL 的最新稳定版本,以利用所有 autovaccum 改进。我们应该始终牢记 autovaccum 对于保持数据库的性能是非常必要的。如果您的系统中存在 CPU 或内存不足的情况,请考虑购买更好的机器。否则表会变得臃肿,性能会在一段时间内下降。


ker*_*att 4

来自: http: //wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

“几乎所有吸尘问题的答案是更频繁地吸尘,而不是更少,这样每个单独的吸尘操作就可以减少清理工作。”

一些基本的调整建议:http://www.postgresql.org/docs/current/static/routine-vacuuming.html#AUTOVACUUM

(自动)真空详细信息:http://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT