PostgreSQL 备份导致的 Cache Pollution(缓存污染)
一次典型案例与工程化解决方案
在 PostgreSQL 的日常运维中,我们大多数人都关注 slow SQL、索引膨胀、锁冲突、autovacuum 等显性问题。但实际上,还有一个极易被忽视,却能显著影响线上性能的隐性因素 —— Cache Pollution(缓存污染)。
本文通过一个真实业务场景(已做脱敏处理),系统性分析 PostgreSQL 在执行 pg_dump 等大规模顺序读时如何造成缓存污染,以及它如何间接导致线上 SQL 的性能波动,并给出工程可落地的解决方案。

1. 什么是 Cache Pollution?
缓存污染(Cache Pollution)指的是:
某些非业务核心的扫描操作(如全表顺序扫描、pg_dump、ETL、统计任务等)占用了大量 shared_buffers 或 OS Page Cache,导致业务真正依赖的热点页被挤出缓存,从而造成业务 SQL 性能下降。
典型表现:
-
业务 SQL 延迟突然飙升;
-
CPU、锁等待、执行计划都正常;
-
pg_buffercache 中热点表驻留率明显下降;
-
触发大量 shared_buffers miss → IO → SQL 变慢。
这是一类容易被忽视的数据库性能隐患。
