PostgreSQL autovacuum导致性能显着下降

问题描述 投票:-1回答:1

我们的Postgres数据库(托管在具有1个CPU,3.7 GB RAM的Google Cloud SQL上,见下文)主要由一个大约90GB的表组成,大约有大约6000万行。使用模式几乎完全由附加和表的末尾附近的一些索引读取组成。有时会删除一些用户,删除分散在表中的一小部分行。

这一切都运行正常,但每隔几个月就会在该表上触发autovacuum,这会对我们服务的性能产生大约8小时的影响:

  • 在autovacuum(几个小时)的持续时间内,存储使用量增加约1GB,然后慢慢返回到之前的值(由于autovacuum释放页面,可能最终会降到它之下)
  • 数据库CPU利用率从<10%跃升至~20%
  • 磁盘读/写操作从近零增加到~50 /秒
  • 数据库内存略有增加,但仍低于2GB
  • 如预期的那样,事务/秒和入口/出口字节也相当不受影响

这具有在自动真空期间将我们的服务的第95延迟百分位数从~100ms增加到~0.5-1s的效果,这反过来触发我们的监视。该服务每秒大约提供10个请求,每个请求包含一些简单的数据库读/写,每个读取/写入的延迟通常为2-3ms。

以下是一些说明问题的监控屏幕截图:

CPU usage Storage usage Memory usage Read/Write operations Latency

数据库配置相当普遍:

DB configuration

记录此autovacuum进程的日志条目如下所示:

system usage: CPU 470.10s/358.74u sec elapsed 38004.58 sec
avg read rate: 2.491 MB/s, avg write rate: 2.247 MB/s
buffer usage: 8480213 hits, 12117505 misses, 10930449 dirtied
tuples: 5959839 removed, 57732135 remain, 4574 are dead but not yet removable
pages: 0 removed, 6482261 remain, 0 skipped due to pins, 0 skipped frozen
automatic vacuum of table "XXX": index scans: 1

我们可以调整什么建议以减少未来自动真空对我们服务的影响?或者我们做错了什么?

postgresql google-cloud-sql postgresql-performance autovacuum
1个回答
2
投票

如果你可以增加autovacuum_vacuum_cost_delay,你的autovacuum会运行得更慢并且侵入性更小。

但是,通过将autovacuum_vacuum_cost_limit设置为2000左右,通常是最快的解决方案。然后它完成得更快。

您也可以尝试自己安排桌子的VACUUMs,有时候伤害最少。

但坦率地说,如果一个无害的autovacuum足以扰乱你的操作,你需要更多的I / O带宽。

© www.soinside.com 2019 - 2024. All rights reserved.