2013-10-08 56 views
0

我想知道當我運行查詢時,數據庫的內容在我係統的RAM中。該數據集大約4.1 GB,我的機器有8 GB的RAM。我是否每次運行SELECTUPDATE查詢時都從磁盤讀取數據?如何判斷我的Postgres 9.2數據庫是否在內存中運行?

+0

你肯定會被擊中'UPDATE'盤爲你的數據庫將不遵從ACID,如果它只是作爲內存是不是寫給內存耐用(D在ACID)。 – CadentOrange

回答

0

所有系統都允許跟蹤IO活動。所以你可以使用系統監控工具 - 例如,有一個用於linux的iotop。

0

如果該查詢是在系統上正在運行的唯一東西,請使用系統工具(vmstat,sar)查看IO執行時是否出現尖峯。如果還有很多其他事情正在進行,可能很難弄清楚你想要什麼,因爲沒有簡單的方法來區分從磁盤讀取的數據和從操作系統的文件系統緩存中讀取的數據。您可以打開track_io_timing並查看結果時間是否與來自RAM的數據一致。

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

他也可以在這裏找到官方的數據收集:http://www.postgresql.org/docs/9.1/static/monitoring-stats.html –

+0

這提供了不對稱的信息。如果命中率非常高,你知道它來自記憶。但是,如果它很低,您不知道它是真正來自磁盤還是來自操作系統管理的緩存。 – jjanes

相關問題