2012-09-21 28 views
4

我有一個擁有大約550萬條記錄的單個表的本地數據庫。我在Heroku Postgres上創建了一個新的數據庫(Basic Plan),並將本地轉儲恢復到它。啓動psql並做一些查詢我注意到速度明顯低於本地。然後,我爲Crane計劃配備了另一個數據庫,並且這些數據同樣很糟糕。本地vs Heroku Postgres速度

這裏的一些數字:


select count(*) from table;
地方:1216.744毫秒
的Heroku(基本):4697.073毫秒
的Heroku(起重機):2972.302毫秒


select column from table where id = 123456;
本地:0.249 ms
的Heroku(基本):127.557毫秒
的Heroku(起重機):137.617毫秒


如何是這些巨大差異可能嗎?這可能完全與硬件差異有關嗎?有沒有簡單的方法來提高吞吐量?

+0

如果你SSH服務器之後做查詢,然後有什麼不對的,如果你使用psql客戶端可以從本地網絡則可以主要原因 – abhirathore2006

回答

3

所以你問是否有可能在線數據庫服務比本地數據庫慢?是的,當然它會變慢,它有所有的網絡延遲來處理
有沒有簡單的方法來加速它?除了顯而易見的更快的網絡鏈接和移動辦公室到Heroku的數據中心隔壁 - No

+1

所以上面的時間包括網絡延遲,因而是不正確的。使用'解釋analyze'給服務器上的執行時間,這些數字與當地的執行時間不相上下。謝謝! – fphilipe

6

單行選擇的120-130ms可能表示網絡延遲,正如Lukos所建議的那樣,您可以減少這通過運行您的查詢更接近數據庫服務器。但是,2-3秒的延遲更可能導致數據庫速度 - 特別是I/O吞吐量。這就是爲什麼Heroku強調他們的數據庫產品的不同與緩存大小有關。

Heroku Postgres將您的數據存儲在Amazon EBS。 (這在an incident report中顯示,並且會偶然解釋1TB的限制。)EBS性能有點像過山車;比本地磁盤更多。一些閱讀可以很快,而其他閱讀可能很慢。有時整個卷會降至100 KB/s,有時會使互連最大化。

根據我在EC2中託管數據庫的經驗,我發現通過EBS運行RAID 10可以平滑性能差異。我不相信Heroku會這樣做,因爲這會大大增加數據庫計劃價格點以上的成本。 AWS最近宣佈provisioned IOPS for EBS將允許您支付專用的產能,進一步提高可預測性,但也增加成本。

0

我在Heroku Postgres上創建了一個新數據庫(基本計劃),並將本地轉儲恢復到它。

看起來你是在同一時間玩不同的數據庫。

select column from table where id = 123456; 
Local: 0.249 ms 
Heroku (Basic): 127.557 ms 
Heroku (Crane): 137.617 ms 

我高度懷疑你的Heroku應用程序和Heroku數據庫不在同一個區域託管。兩者都需要在美國或歐盟。