2012-10-16 43 views
2

我正在阅读关于MySQL: Using Connector/Net with Connection Pooling。建议不要使用全局对象并手动打开/关闭它。此外,建议使用MySqlHelper而不是使用MySqlCommand对象。MySQL Connector Connector with many async inserts

因此,假设我有一个CONNECTION_STRING设置,我可以这样做:

MySqlHelper.ExecuteNonQuery(CONNECTION_STRING, 
    @"INSERT INTO `table1` (`col3`,`col4`) VALUES (@col3, @col4);", 
    (new List<MySqlParameter>() { 
       new MySqlParameter("@col3", @"another value"), 
       new MySqlParameter("@col4", @"some value")  
      }).ToArray() 
    ); 

现在,假设我做(通过TPL)的异步并行任务上面所说的几千倍。

我的MySQL服务器上有一些允许的最大连接数,并且我开始引发异常,声称用户超出了最大连接数。我认为连接池是想为我自动处理这个问题?驱动程序是不是假设为我自动集合和排队?

我已经允许目前1500的最大连接数,和我说这在我的连接字符串:

Pooling=True;minimumPoolSize=0;maximumpoolsize=100;

然而,我仍然得到最大连接数超标。我需要一些关于如何处理许多异步插入的建议,而不会破坏这个最大连接限制。

+0

终于找到了问题,我想MySQL具有'max_connections'作为一个服务器范围内的事物(我的是1500),但是也有'max_user_connections'(每个MySQL用户帐户的最大连接数),它被设置为15个。 – user17753

+0

You可以添加您的评论作为答案,然后在一段时间后接受您自己的答案。 –

回答

3

除了max_connectionsmax_user_connections这里是重要的。它可以用于查询:

show variables like 'max_user_connections'; 

为了避免超出您的MySQL用户,您需要确保maximumpoolsize(连接字符串)设置为东西比max_user_connections低和其他应用程序都没有最大连接数与可能超过上限的相同用户帐户建立连接。因此,例如,我可以将我的设置设置为5,因为我有一个15的上限。

上限这是大多数托管服务非常常见的限制您正在使用的资源。

在单个连接中执行大量查询也可能是一种可行的解决方法。

此外,有时主机限制max_queries_per_hour和其他此类变量。