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

时间:2013-10-08 18:41:39

标签: database postgresql

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

3 个答案:

答案 0 :(得分:1)

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

以下查询将显示您的缓存命中率。如果你只打击缓存,命中率应该在0.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;

可以找到此查询和其他效果查询here

答案 1 :(得分:0)

所有系统都允许跟踪IO活动。所以你可以使用系统监控工具 - 例如有一个iotop for linux。

答案 2 :(得分:0)

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