c# - 连接池与max_connection的关系

标签 c# mysql multithreading

我正在使用 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/

相关文章:

mysql - 在特定行上用 mysql 中的其他列更新列

c++ - boost 线程和信号处理

java - 这种传递和修改 HashMap 的方式是线程安全的吗

java - 让主线程等待其他线程完成

c# - 列出内部 IQueryable 对象

c# - 变量 "cluster"用于计算 C# 中的阶乘

mysql - 在mysql中查找相似的句子

mysql - 无法检查所有记录是否在字段中具有特定值

c# - 使用 SharpAvi 将图像转换为视频

c# - Nullable<T> 作为参数