如何清理托管在AWS RDS上的PostgreSQL的缓冲区缓存?
AWS RDS PostgreSQL 清理缓存测试真实查询耗时操作指南
你遇到的首次查询超时、后续查询极快的现象,本质是首次查询需要从持久化存储拉取数据页到内存,后续查询直接读取数据库共享缓存、操作系统页缓存或RDS存储层缓存的热数据,并非查询本身性能达标。
前置注意事项
- 所有缓存清理操作建议在测试环境执行,若需在生产环境操作请避开业务高峰,缓存清理后短时间内所有查询都会变慢,可能影响业务稳定性。
- PostgreSQL 默认没有全局查询结果缓存,无需专门清理该类缓存。
缓存清理操作步骤
清理数据库共享缓存(shared_buffers)
首先安装RDS支持的缓存清理扩展,执行命令:CREATE EXTENSION IF NOT EXISTS pg_dropcache;再执行缓存清理命令:
SELECT pg_drop_buffers();清理操作系统页缓存与RDS存储层缓存
- 测试环境可直接重启RDS实例,重启后所有内存层缓存都会被清空,是最彻底的清理方式
- 生产环境无法重启的话,可找一个容量大于当前实例
shared_buffers大小的无关大表,执行全表扫描挤掉原有缓存:
SELECT COUNT(*) FROM 容量足够的无关大表名;排除客户端缓存干扰
绝大多数数据库客户端工具(DBeaver、Navicat、DataGrip等)默认会开启本地查询结果缓存,测试前需关闭客户端的查询缓存配置,或者直接重启客户端进程后再执行查询。
真实耗时测试方法
- 每次完成上述缓存清理操作后,首次执行目标查询得到的耗时就是冷查询的真实执行耗时
- 若需要分析慢查询原因,清理缓存后执行以下命令查看完整执行计划:
EXPLAIN ANALYZE 你的目标查询语句; - 多轮测试需每轮都重新执行缓存清理操作,避免热数据影响结果。
内容的提问来源于stack exchange,提问作者zhachun
相关产品推荐
相关产品推荐

