Postgres建议使用自动真空去除死元组。但是,运行自动真空是否会使对同一表的其他查询变得缓慢?它是否添加了影响性能的锁(行或表级别)?CPU上是否有很大的负载,还是占用了大量的内存。
这将帮助我们决定是否应该打开我们的表之一的自动真空,有很高的写入和删除量,或者我们是否应该在非高峰时间定期运行手动真空。
发布于 2017-06-19 16:02:16
它的内存使用受到autovacuum_work_mem或maintenance_work_mem的限制。它的IO消费受到autovacuum_vacuum_cost_delay和朋友的限制,而这些默认情况导致IO需求相当低。CPU的使用不是直接受限的,而是间接地受到IO消耗节流阀的限制,而且默认设置通常接近可忽略不计的范围。
自动真空确实在表上使用锁,但它是一个弱锁,它不影响正常操作(选择、更新、删除),但会干扰添加索引或截断表等操作。自动真空通常会取消它自己,当它检测到它阻塞了什么东西时,它会交出锁。,但是如果它处于“防止环绕”模式,它就不会这么做。
默认情况下,自动真空是打开的。你不应该关掉它。在非高峰时间使用手动吸尘器是可以的,但要保持自动吸尘器,作为备份,以捕捉任何你的手动真空漏掉的东西。
https://dba.stackexchange.com/questions/176644
复制相似问题