我正在使用 MySQL 数据库并有一个 C# 应用程序,它具有运行查询的并行线程。当根据 MySQL Workbench 启用连接池时,池中会持续使用 3-5 个连接线程(其中大部分处于休眠状态)。当禁用连接池时,最多创建 1 个连接线程并快速终止。
现在我的问题是,启用连接池后,它会为每个正在运行的 C# 应用程序创建 3-5 个连续连接线程。因此,如果 MySQL 中的 max_connection 设置为 151,我将只能运行 30 个 C# 应用程序实例,对吗?
此外,如果我以牺牲性能为代价禁用连接池,我将能够运行超过 151 个 C# 应用程序实例,因为很少有 C# 应用程序会并行生成查询。我的这个假设是否正确?
最佳答案
当通过 Web 服务器(Apache、Tomcat、IIS 等)运行时,您将受制于它可能运行的线程数。 (Apache 有 MaxClients
。)
所有操作的单一连接是编写程序的“正常”方式。但是你有 3-5 个“线程”,每个线程都有自己的连接?如果是,是的,您被限制在大约 30 个 Web 服务器线程(或程序的独立调用)。
max_connections
可以增加(通过更改 my.cnf 并重新启动)。 2000 是高,但并非不合理。
当您有几十个连接实际上做某事时,问题就来了,而不是“ sleep ”。 (参见 SHOW PROCESSLIST;
)
MySQL 连接速度相当快; “池”还有其他问题,所以它不一定利大于弊。连接具有“状态”,包括@variables、tmp 表等,每当您请求连接并且它来自“池”时都需要重置。
关于c# - 连接池与max_connection的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505692/