问题描述
有时我运行一个Postgres查询需要30秒.然后,我立即运行相同的查询,这需要2秒钟.看来Postgres具有某种缓存.我可以以某种方式查看该缓存保存了什么吗?我可以强制出于清理目的清除所有缓存吗?
Sometimes I run a Postgres query it takes 30 seconds. Then, I immediately run the same query and it takes 2 seconds. It appears that Postgres has some sort of caching. Can I somehow see what that cache is holding? Can I force all caches to be cleared for tuning purposes?
注意:我基本上是在寻找以下SQL Server命令的postgres版本:
Note: I'm basically looking for a postgres version of the following SQL Server command:
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
但是我也想知道如何查看该缓冲区中实际包含的内容.
But I would also like to know how to see what is actually contained in that buffer.
感谢您的帮助.
推荐答案
您可以使用pg_buffercache模块查看PostgreSQL缓冲区高速缓存中的内容.我已经做了一个名为"在PostgreSQL缓冲区高速缓存内的演示,它解释了什么您会看到,而我展示了一些更复杂的查询,以帮助解释随之而来的信息.
You can see what's in the PostgreSQL buffer cache using the pg_buffercache module. I've done a presentation called "Inside the PostgreSQL Buffer Cache" that explains what you're seeing, and I show some more complicated queries to help interpret that information that go along with that.
在某些系统上也可以查看操作系统缓存,请参见 pg_osmem.py 举例说明.
It's also possible to look at the operating system cache too on some systems, see pg_osmem.py for one somewhat rough example.
无法轻松清除缓存.在Linux上,您可以停止数据库服务器并使用 drop_caches 工具清除OS缓存;请务必留意那里的警告,以便先运行同步.
There's no way to clear the caches easily. On Linux you can stop the database server and use the drop_caches facility to clear the OS cache; be sure to heed the warning there to run sync first.
这篇关于是否查看并清除Postgres缓存/缓冲区?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!