2

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

因此,假设我有一个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;

但是,我仍然超出了最大连接数。我需要一些关于如何处理许多异步插入而不超出这个最大连接限制的建议。

4

1 回答 1

3

除此之外max_connectionsmax_user_connections这里很重要。可以查询:

show variables like 'max_user_connections';

为避免超过 MySQL 用户的最大连接数,您需要确保maximumpoolsize(在连接字符串中)设置为低于此值max_user_connections,并且其他应用程序未打开与同一用户帐户的连接,其总数可能超过上限。例如,如果我的上限为 15,我可以将我的设置为 5。

大多数托管服务都非常普遍地限制这一点,以限制您使用的资源。

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

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

于 2012-10-16T17:31:46.640 回答