[英]mySQL “Too many connections” error influenced by number of mongrel instances?
最近我開始在高流量時獲得mySQL“太多連接”錯誤。 我的rails應用程序在共享主機上有2個實例的mongrel集群上運行。 最近的一些變化可能會推動它:
我已經完成了代碼審查,以減少數據庫調用,優化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.