2011-10-07 140 views
2

我的Rails應用程序總是達到我的VPS在Linode設置的磁盤I/O速率的閾值。它設置爲3000(我從2000年起),每隔大約一小時我會收到一個通知,它達到4000-5000 +。高磁盤IO速率

我可以使用哪些方法來最小化磁盤IO速率?我主要使用獅身人面像(思維獅身人面像插件)和緯度和經度距離搜索。

有什麼方法可以避免?

我正在使用Rails 2.3.11和MySQL。

謝謝。

回答

3

因爲你的問題不明確,簡明地回答,這是一般的幾件事情之一的標誌:

  • 你的數據集是因爲你可以修剪歷史數據的太大。刪除不再相關的內容。
  • 您的表格沒有正確編制索引,您正在進行大量表格掃描。請在每個慢速查詢中與EXAMINE進行覈對。
  • 您的數據結構沒有針對您使用它的方式進行優化,而且您正在進行太多連接。一些戰術去規範化將在這裏幫助。確保你所有的JOIN查詢是絕對必要的。
  • 您正在檢索的數據超出了服務該請求所需的數據量。令人遺憾的是,在顯示用戶名稱列表時,人們從用戶表中加載巨大的TEXT或BLOB列太常見了。只加載你需要的東西。
  • 你正在被某種自動化的刮板機或蜘蛛機器人擊中,它一頁接一頁地系統地下載整個網站。如果這是一個問題,您可能需要更改您的robots.txt,或者開始阻止麻煩的IP。
0

它是高位高位持續很長一段時間,還是隻是暫時尖峯?

有沒有特定的方法可以避免(除非寫入磁盤)。

您可以嘗試在生產中使用類似NewRelic的分析器,以更深入地瞭解您的表現。分析器將突出顯示需要很長時間的操作,然而,當您檢查您在該操作中使用的特定算法時,您可能會發現該特定操作的低效率。

5

你是否檢查你的服務器是否交換了自己的死亡? 「頂」是什麼意思?

你的Linode可能只有有限的RAM,這可能是非常有可能,它是交換像瘋了似的讓一切運行..

如果在IO圖中看到,那就是交換活動!您需要將您的Linode升級到更多RAM, 或限制正在運行的進程的數量/大小。你還應該添加大約2倍的RAM大小作爲交換空間(交換分區)。

http://tinypic.com/view.php?pic=2s0b8t2&s=7