2014-09-23 77 views
0

我正在開發一個使用C#和MySql的應用程序(存儲過程)。在運行該應用程序一段時間後,它顯示連接太多。然後我使用命令SHOW STATUS WHERE variable_name = 'Threads_connected';SHOW PROCESSLIST;來調試問題。似乎每次我在我的應用程序上運行任何操作時,mysql會創建新線程,並將線程標記爲睡眠。此外,線程沒有按時關閉。我發現了一個解決方案,即設置mysql環境變量如下。mysql中連接錯誤太多

interactive_timeout=180 
wait_timeout=180 
  1. 這個解決辦法有,因爲它會自動殺死連接的應用程序產生任何影響?如果數據從數據庫獲取時間有點長,會發生什麼?
  2. 我預計一次有1000個流量巨大的流量。那麼mysql中的最大連接數應該是多少?這會降低mysql的性能嗎?

[注:有一個在我的應用程序沒有問題,因爲我已經關閉了所有的MySQL連接]

在此先感謝。

+0

你的筆記聽起來像你實際上在你的連接上調用'Close'。你有沒有想過使用塊?這比你自己處理所有可能的異常情況要容易得多。 – nvoigt 2014-09-23 05:41:48

+0

是的,我正在使用'Close'。如果沒有任何作用,我會試一試。 – Redone 2014-09-23 05:43:46

+1

手動調用'Close'容易出錯,因爲異常或正常流量控制可能會繞過您的關閉呼叫。命令和讀取器也可以與'使用'塊一起使用,所以當發生異常時你不需要關注資源管理。 – nvoigt 2014-09-23 05:45:41

回答

1

我希望下面ARTICAL將幫助你得到你的第二點的答案

http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

在應用程序不關閉連接正常的情況下,WAIT_TIMEOUT是調整的一個重要參數,並丟棄未使用或空閒連接以最大限度地減少到MySQL服務器的活動連接數 - 這最終將有助於避免「太多連接」錯誤。

Threads_running是一個有價值的指標監測,因爲它不指望睡線程 - 它顯示主動和目前正在處理的查詢量,同時threads_connected的狀態變量顯示所有連接線的值,包括空閒連接以及

+0

@Rachit Patel我正在考慮使用solaris來託管mysql服務器。任何mysql配置腳本都將有助於處理巨大的流量。 – Redone 2014-09-23 06:10:28

+0

@Redone是的,你可以改變「max_connections」屬性的值來增加最大連接。 http://dev.mysql.com/doc/refman/5.0/en/show-variables.html。我對solaris或windows服務器不太瞭解mysql的好處。 – 2014-09-23 06:31:13