gpt4 book ai didi

PostgreSQL autovacuum 导致性能显着下降

转载 作者:行者123 更新时间:2023-12-04 02:51:30 26 4
gpt4 key购买 nike

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

这一切正常,但每隔几个月就会在该表上触发自动清理,这会显着影响我们服务的性能约 8 小时:

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

  • 这会在 autovacuum 期间将我们服务的第 95 个延迟百分位数从 ~100ms 增加到 ~0.5-1s,从而触发我们的监控。该服务每秒处理大约 10 个请求,每个请求由几个简单的 DB 读/写组成,每个请求的延迟通常为 2-3 毫秒。

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

    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

    有什么建议我们可以调整以减少 future autovacuums 对我们服务的影响?还是我们做错了什么?

    最佳答案

    如果可以增加autovacuum_vacuum_cost_delay ,您的自动吸尘器会运行得更慢并且侵入性更小。

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

    您也可以尝试安排 VACUUM自己在 table 上的时候,在它伤害最小的时候。

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

    关于PostgreSQL autovacuum 导致性能显着下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54831212/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com