Postgresql:autovacuum 会影响查询性能吗?它是否应用了影响其他查询性能的锁?

Aro*_*roj 2 postgresql performance autovacuum

Postgres 建议使用 autovacuum 删除死元组。但是运行 autovacuum 最终会使对同一个表的其他查询变慢吗?它是否添加了影响性能的锁(行级或表级)?CPU 上是否有重大负载或是否消耗了大量内存。

这将帮助我们决定是否应该为我们的一个具有大量写入和删除的表打开自动清理,或者我们是否应该在非高峰时间定期运行手动清理。

jja*_*nes 5

它的内存使用受autovacuum_work_mem或约束maintenance_work_mem。它的 IO 消耗受到autovacuum_vacuum_cost_delay和朋友的限制,而这些的默认值导致 IO 需求非常低。CPU 使用率不受直接约束,而是受 IO 消耗节流的间接约束,并且在默认设置下通常可以忽略不计。

Autovacuum 确实会锁定表,但它是一种弱锁定,不会干扰正常操作(SELECT、UPDATE、DELETE),但会干扰添加索引或截断表等操作。 Autovacuum 通常会在检测到阻塞某物时取消自身并放弃锁定,但如果它处于“防止环绕”模式,则不会这样做。

Autovacuum 默认开启。你不应该关闭它。在非高峰时段运行手动真空吸尘器很好,但将自动真空吸尘器作为后备,以捕捉手动真空吸尘器遗漏的任何东西。

  • @PhilFrost 是的,但文档称之为“中断”,而不是“取消”。请参阅此处 https://www.postgresql.org/docs/13/routine-vacuuming.html#AUTOVACUUM (2认同)