2014-01-31 45 views
1

當我開始我的Rails應用程序並打開它需要查詢我的MongoDB數據庫中的網頁,則存在以下問題:首先MongoDB的查詢超慢上的Linode

  • 我的本地機器上需要大約1600ms之間,以執行查詢,並呈現在我的Linode所有
  • 大約需要4分鐘執行第一查詢和渲染所有

之後,一切都更快,緩存,頁面加載瞬間,等等

但真的,4分鐘?這是爲什麼?這是從磁盤加載到MongoDB的內存嗎?爲什麼它比我的本地機器花費更多的時間?

這是由於在Linode上共享硬盤嗎?運行iostat

$ iostat -d 2 

Linux 3.12.6-x86_64-linode36 (linode) 01/31/2014 _x86_64_ (8 CPU) 

Device:   tps kB_read/s kB_wrtn/s kB_read kB_wrtn 
xvda   1129.69  43026.47  17.62 1940251345  794504 
xvdb   248.43  2572.50  698.08 116005452 31479356 

Device:   tps kB_read/s kB_wrtn/s kB_read kB_wrtn 
xvda   4491.50 179012.00   0.00  358024   0 
xvdb    0.00   0.00   0.00   0   0 
+0

沒有足夠的信息來了解您的性能問題可能是什麼。我建議你從資源(RAM,CPU,I/O)和軟件版本(服務器/導軌/ gem版本)方面比較本地和linode環境之間的差異開始。您還需要分開生成頁面所涉及的軟件時間(例如,數據庫查詢與Rails應用程序或瀏覽器渲染)以確定哪些方面「緩慢」。 – Stennie

+0

我肯定會啓用MongoDB [query profiler](http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/),並確保你有[適當的索引](http:// docs .mongodb.org/manual/indexes /)定義,以改善慢速查詢。你真的需要考慮在應用程序中傳遞頁面時涉及的*整個堆棧,而不僅僅是數據庫。您的本地計算機可能具有更多內存,更快的磁盤和不同的軟件版本等。 – Stennie

回答

0

當這是我的理解,我注意到很多活動是蒙戈加載所有數據從磁盤到內存中,所以我想這可能是因爲您遇到在該階段的性能降低。在啓用應用程序之前,使用幾個查詢打開數據庫以加熱它可能是有意義的。