连接池和max_connection关系

时间:2015-04-08 04:00:53

标签: c# mysql multithreading

我正在使用MySQL数据库并拥有一个C#应用程序,其中有并行线程运行查询。当根据MySQL Workbench启用连接池时,池中连续使用3-5个连接线程(大多数都处于休眠状态)。最多禁用连接池时,会创建一个连接线程并快速终止。

现在我的问题是,当连接池启用时,它会为每个运行的C#app创建3-5个连续的连接线程。因此,如果MySQL中的max_connection设置为151,那么我只能运行30个C#应用程序实例,对吗?

此外,如果我以牺牲性能为代价禁用连接池,我将能够运行超过151个C#应用程序实例,因为很少有C#app会并行生成查询。我在这个假设中是对的吗?

1 个答案:

答案 0 :(得分:0)

当通过Web服务器(Apache,Tomcat,IIS等)运行时,您可能会受到它可能运行的线程数的限制。 (Apache有MaxClients。)

所有操作的单一连接是“正常”'写程序的方法。但是你有3-5个"线程",每个都有自己的连接?如果是这样,是的,您只能使用大约30个Web服务器线程(或程序的独立调用)。

max_connections可以增加(通过更改my.cnf并重新启动)。 2000年很高,但并非不合理。

当你有几十个连接实际做某事时,问题就来了,而不是" Sleep"。 (见SHOW PROCESSLIST;

MySQL连接速度相当快; "池"有其他问题,所以它不一定比伤害更有益。连接有" state",包括@variables,tmp表等,每当你要求连接时它都需要重置,它来自" pool"。