1

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

4

3 回答 3

2

除了像其他人建议的那样监控 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;

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

于 2013-10-08T21:00:00.883 回答
0

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

于 2013-10-08T20:32:19.073 回答
0

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

于 2013-10-08T19:01:21.633 回答