刷新 OS page cache 和 Postgres buffer pool

本页目录

在实验时,考虑当前缓存的状态非常重要 — 包括 Postgres 缓冲池 (其大小由 shared_buffers 控制) 和操作系统的页缓存。如果决定每次实验都从冷状态的缓存开始,我们需要刷新它们。

刷新Postgres缓冲池

要刷新 Postgres 缓冲池,请重新启动 Postgres。

要分析当前缓冲池的状态,可以使用 pg_buffercache。

刷新操作系统页缓存

刷新 Linux 页缓存:

Shell
sync
echo 3 > /proc/sys/vm/drop_caches

查看 Linux 中当前 RAM 的使用情况 (MiB):

Shell
free -m

在 macOS 上,刷新页缓存:

Shell
sync
sudo purge

查看 macOS 上当前 RAM 的状态:

Shell
vm_stat

我见

在 17 版本中,pg_buffercache 新增 pg_buffercache_evict,顾名思义,排除指定缓冲区,这样进行实验就要方便多了。

PSQL
postgres=# \dx+ pg_buffercache 
 Objects in extension "pg_buffercache"
           Object description           
----------------------------------------
 function pg_buffercache_evict(integer)
 function pg_buffercache_pages()
 function pg_buffercache_summary()
 function pg_buffercache_usage_counts()
 type pg_buffercache
 type pg_buffercache[]
 view pg_buffercache
(7 rows)

另外,对于 page cache,我们还可以借助 fincore/pcstat 这类工具进行观察。

讨论与补充

在 GitHub 查看讨论

支持作者

感谢支持 PostgreSQL Howto 的长期维护。

微信赞赏码

读者交流群

二维码若已过期,可通过公众号 PostgreSQL 学徒或邮件联系。

PostgreSQL 学徒读者交流群二维码