2013-02-03 40 views
1

我們以前使用過Heroku Basic數據庫,但發現我們網站上涉及重型數據庫查詢的操作非常緩慢。我們3天前升級到了Heroku Crane數據庫,希望它能幫助解決這個問題。但是,查詢看起來一樣慢。即使連續執行兩次相同的操作似乎也很慢,但由於高速緩存的原因,我預計它會很快。儘管Heroku數據庫緩存,爲什麼我們的Rails數據庫查詢速度很慢?

我們的數據庫大小隻有15.4MB,而我們使用的Crane數據庫提供了400MB的緩存。理論上,整個數據庫似乎都可以被緩存,從而提供了非常快速的查詢處理。應該是這樣嗎?我們如何去解決或解決問題?此外,緩存磁盤是基於塊還是基於查詢(即,我們是否必須運行完全相同的查詢兩次才能從緩存中受益?)

謝謝。

回答

4

僅供參考我在Heroku Postgres團隊工作。

一般來說,Postgres會緩存從磁盤中提取的底層表數據,因此您至少需要對它進行一次操作才能將其加載到內存中。但是,如果您正在執行復雜的查詢,緩存數據將無法爲您帶來太多的收益,有時Rails無法將足夠的工作委託給數據庫,從而導致您的應用程序CPU受限並且您的數據庫未充分利用。

我會深入優化您的查詢和索引,讓Postgres更好地發揮它的魔力。您可以從運行EXPLAINEXPLAIN ANALYZE開始,找出查詢的哪一部分需要很長時間。

優化你的數據庫使用情況良好的資源:http://www.freebsddiary.org/postgresql-analyze.phphttp://wiki.postgresql.org/wiki/Performance_Optimization

使用EXPLAIN在軌道的一個例子:Understanding how to optimize a query via the Postgres/rails explain data