2012-07-16 80 views
0

希望這裏有人能給我一些指點。我們有一個Rails應用程序,橫跨5個ruby實例水平縮放,指向一個MySQL數據庫。我們對這個應用程序發出的POST請求通常在600ms範圍內返回。然而,有時候,這些請求的運行時間非常長,例如50s +。它看起來不像任何不尋常的事情發生在Ruby代碼中。這是否意味着我們需要擴展我們的MySQL實例?據我所知,我們沒有那麼努力,當然不是20k +要求我們認爲是可以處理的秒數。將不勝感激從哪裏開始尋找任何指針。我們也開始用NewRelic分析我們的應用程序。間歇性的慢ActiveRecord/MySQL查詢

Started POST "/api/something" for *** at 2012-07-16 19:00:19 +0000 
    Processing by SomethingController#create as JSON 
    Parameters: {} 
Completed 200 OK in 59542ms (Views: 1.8ms | ActiveRecord: 59265.2ms) 
+1

你有訪問mysql的終端嗎?當請求緩慢時,你可以運行'SHOW FULL PROCESSLIST'來查看是否以及是否鎖定了數據庫 – 2012-07-16 20:34:07

回答

0

1)有一個看看params哈希生成59S數據庫查詢應用程序之前被髮送。將其與其他參數進行比較,找出可能導致麻煩的差異。

2.)使用--log=/path/to/log.log選項啓動mysqld選項來記錄服務器處理的所有查詢,並查看花費如此長時間的查詢。

3.)檢查是否所有外鍵都有索引。 Rails默認情況下不會將索引添加到外鍵列。這是一些軌道開發人員忽略的普遍問題。如果您有一些沒有索引的外鍵,請通過遷移向其添加索引。