Database 如何判断我的Postgres 9.2数据库是否在内存中运行?

Database 如何判断我的Postgres 9.2数据库是否在内存中运行?,database,postgresql,Database,Postgresql,我想知道当我运行查询时,数据库的内容是否在系统的RAM中。数据集约为4.1 gb,我的机器有8gb的RAM。每次运行SELECT或UPDATE查询时是否都从磁盘读取数据?所有系统都允许跟踪IO活动。因此,您可以使用系统监控工具—例如,linux有一个iotop 如果该查询是系统上唯一活动运行的查询,请使用系统工具(vmstat、sar)查看执行时IO是否出现峰值。如果还有很多其他事情要做,就很难弄清楚您想要什么,因为没有简单的方法来区分从磁盘实际读取的数据和从操作系统的文件系统缓存读取的数据。您

我想知道当我运行查询时,数据库的内容是否在系统的RAM中。数据集约为4.1 gb,我的机器有8gb的RAM。每次运行
SELECT
UPDATE
查询时是否都从磁盘读取数据?

所有系统都允许跟踪IO活动。因此,您可以使用系统监控工具—例如,linux有一个iotop

如果该查询是系统上唯一活动运行的查询,请使用系统工具(vmstat、sar)查看执行时IO是否出现峰值。如果还有很多其他事情要做,就很难弄清楚您想要什么,因为没有简单的方法来区分从磁盘实际读取的数据和从操作系统的文件系统缓存读取的数据。您可以打开track_io_timing,查看生成的时间是否与来自RAM的数据一致。

除了按照其他人的建议监视io活动外,您还可以运行查询以利用PostgreSQL的统计信息跟踪

下面的查询将显示缓存命中率。如果只命中缓存,命中率应该在.99或更高的范围内,如果执行大量磁盘读取,命中率会更低

SELECT 
  sum(heap_blks_read) as heap_read,
  sum(heap_blks_hit)  as heap_hit,
  sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM 
  pg_statio_user_tables;

可以找到此查询和其他性能查询

您肯定会使用
更新
访问磁盘,因为如果您的数据库只写入内存,而内存不持久(ACID中的D),那么它将不符合ACID。他还可以在此处查找有关统计数据收集的官方文档:这提供了不对称信息。如果命中率很高,你可以从记忆中知道。但如果它很低,您就不知道它是真正来自磁盘,还是来自操作系统管理的缓存。