我想知道当我运行查询时,数据库的内容是否在我系统的RAM中。数据集大约4.1 gb,我的机器有8 GB的RAM。每次运行SELECT
或UPDATE
查询时,我都会从磁盘读取数据吗?
答案 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的数据一致。