簡體   English   中英

mySQL“Too many connections”錯誤受到雜種實​​例數量的影響?

[英]mySQL “Too many connections” error influenced by number of mongrel instances?

最近我開始在高流量時獲得mySQL“太多連接”錯誤。 我的rails應用程序在共享主機上有2個實例的mongrel集群上運行。 最近的一些變化可能會推動它:

  • 我網站的流量增加了。 我現在每天平均大約4K頁。
  • 數據庫大小增加了。 我最大的表有~100K行。 在最壞的情況下,一些協會可能會返回數百個實例,盡管大多數情況都要少得多。
  • 我添加了一些功能,在某些操作中增加了數據庫調用的數量和大小。

我已經完成了代碼審查,以減少數據庫調用,優化SQL查詢,添加缺少的索引,並使用:include進行預先加載。 但是,我的許多方法仍然會進行5-10個單獨的SQL調用。 我的大多數動作都有大約100毫秒的響應時間,但我最常見的一個動作平均為300-400毫秒,而一些動作隨機峰值超過1000毫秒。

日志幾乎沒有幫助,因為錯誤似乎是隨機發生的,或者至少該模式似乎與被調用的動作或正在訪問的數據無關。

我可以通過添加額外的mongrel實例來緩解錯誤嗎? 或者mySQL連接是否受服務器限制,因此與我划分流量的進程數無關?

這很可能是我的編碼問題,還是我應該按主機以獲得更多容量/更少的共享服務器負載?

自Rails 2.2以來,ActiveRecord匯集了數據庫連接,這可能是導致你的多余連接的原因。 嘗試在database.yml中為該環境調低pool的值(默認為5)。

可以在這里找到文檔。

你在緩存什么嗎? 它是緩解應用程序和數據庫負載的重要部分。 Rails指南有一節關於緩存

出了點問題。 一個Mongrel實例一次處理1個請求,所以如果你有2個Mongrel實例,那么你不應該看到超過2個活動的MySQL連接(至少來自mongrels)

您可以記錄或繪制SHOW STATUS LIKE'Threads_connected'隨時間的輸出。

PS:這不是很多Mongrels。 如果您希望能夠同時為2個以上的請求提供服務,那么您將需要更多。 ...如果記憶力很緊,你可以切換到Phusion Passenger和REE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM