2012-07-02 52 views
0

我將Max Pool Size = 50添加到連接字符串。這似乎沒有幫助。如何在打開太多連接時使mysqlconnection等待

我得到一個錯誤 dreamhost2.vshost.exe錯誤:0:用戶gensurv_general已經不是「MAX_USER_CONNECTIONS」活動連接

基本上我只是想等到連接數是可管理的多。

我的計劃是這樣的

For i = 0 To 2000000 Step 10 
    Dim j = i 
    Threading.ThreadPool.QueueUserWorkItem(
     Sub() 
      Using connect1 As New MySqlConnection(ConnectLocalhost.serverString) 
       connect1.Open() 

       Dim cmd = New MySqlCommand("set net_write_timeout=99999; set net_read_timeout=99999", connect1) ' // Setting tiimeout on mysqlServer 
       cmd.ExecuteNonQuery() 

       Dim BusinessReader = selectSomeQuery("Select * from tablebusiness limit " + j.ToString + "," + 10.ToString + "", connect1) 

回答

1

顯然,問題不與最大池大小。相反,您已將最大池大小值設置得太高

有在同時連接數兩個限制:在您的應用程序

  1. 最大池大小。一旦有指定數量的活動連接,任何嘗試打開連接的新嘗試都必須等待,直到某些連接將返回到池。所以這並不意味着你的客戶會收到一個錯誤,這僅僅意味着你將能夠同時服務不超過50個客戶,其餘的將不得不等待。
  2. max_user_connections在數據庫中。一旦存在指定數量的活動連接,數據庫將拒絕接受任何進一步的連接(發出您收到的錯誤)。

基本上,最大池大小不應該超過MAX_USER_CONNECTIONS限制(當然,比如,如果你有10個應用程序同時運行,並使用相同的數據庫,不僅每個應用程序的最大池大小,但最大的總和所有應用程序的池大小也不應超過max_user_connections限制)。

您可以增加最大池大小以使您的應用程序在繁重的併發負載下執行得更好,但是一旦設置得太高,max_user_connections將耗盡,您將開始接收這些錯誤消息。

+0

最大連接設置爲150 –

+0

也將簡單地添加最大池大小= 50;在連接字符串使線程「等待」 –