我有一個64GB內存和PostgreSQL 9.2的服務器。它只有一個小型數據庫「A」,只有4GB,每小時只查詢一次,還有一個大型數據庫「B」,大約60GB,每秒查詢40-50x!PostgreSQL性能:當服務器忙於大數據庫時,很少在內存中使用小型數據庫
正如預期的那樣,Linux和PostgreSQL用較大的數據庫數據填充RAM,因爲它更常被訪問。
我現在的問題是,對小數據庫「A」的查詢是至關重要的,必須運行在< 500毫秒。日誌文件每天顯示幾個查詢,但花費> 3s。如果我手動執行它們,它們也只需要10ms,因此我的索引很好。
所以我猜想,當PostgreSQL必須從磁盤加載小型數據庫索引塊時,纔會發生這些長跑運動員。
我已經有了一種「緩存加熱器」腳本,它每秒都會重複「SELECT * FROM x ORDER BY y」查詢到小型數據庫,但它浪費了大量的CPU能力,僅僅改善了一點情況。
有沒有更多的想法如何告訴PostgreSQL我真的希望這個小型數據庫在內存中「粘」?
如果您使用SQLite的內存中實例來保存4Gig數據庫會怎麼樣?仔細查看PostGresql的文檔,它看起來並不像它專門在內存中運行,除非在RAM磁盤上運行它。 –
@RobertHarvey相當多; Pg目前不提供表格/索引固定。 –
如果手工運行查詢只需要10ms,但您的緩存加熱器不能改善非手邊情況,那麼您的緩存加熱器會運行錯誤的查詢並加熱緩存的錯誤部分。爲什麼'order by'? – jjanes