0

我在连接字符串中添加了 Max Pool Size=50。这似乎没有帮助。

我收到一个错误 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)
4

1 回答 1

1

问题显然不在于最大池大小。相反,您将最大池大小值设置得太高

同时连接数有两个限制:

  1. 应用程序中的最大池大小。一旦有指定数量的活动连接,任何新的打开连接的尝试都必须等到一些连接将返回到池中。所以这并不意味着您的客户会收到错误,这只是意味着您将能够同时为不超过 50 个客户提供服务,其余的将不得不等待。
  2. 数据库中的 max_user_connections。一旦有指定数量的活动连接,数据库将拒绝接受任何进一步的连接(发出您收到的错误)。

基本上,最大池大小不应超过 max_user_connections 限制(当然,如果您有 10 个应用程序同时运行并使用相同的数据库,那么不仅每个应用程序的最大池大小,而且所有应用程序的最大池大小总和不应超过max_user_connections 限制也是如此)。

您可以增加最大池大小以使您的应用程序在高并发负载下更好地执行,但是一旦您将其设置得太高,max_user_connections 将被耗尽并且您将开始收到这些错误消息。

于 2012-07-02T11:23:08.237 回答