我正在使用MySQL数据库,并有一个C#应用程序,其中有并行线程运行查询。在启用连接池时,如MySQL,Workbench 3-5连接线程继续在池中使用(其中大多数线程处于休眠状态)。当连接池最多禁用1个时,连接线程将被快速创建和终止。
现在我的问题是,当启用连接池时,它会在每个运行的C#应用程序中创建3到5个连续连接线程。因此,如果max_connection设置在MySQL中为151个,我只能运行30个C#应用程序实例,对吗?
另外,如果我以牺牲性能为代价禁用连接池,我将能够运行我的C#应用程序的151个实例,因为很少有C#应用程序会并行地生成查询。我这个假设是对的吗?
发布于 2015-04-08 23:33:21
在通过Web Server (Apache、Tomcat、IIS等)运行时,您将取决于它可能运行的线程数量。(Apache有MaxClients。)
所有操作的单一连接是编写程序的“正常”方式。但是你有3-5个“线程”,每个线程都有自己的连接?如果是,则限制在大约30个Web服务器线程(或程序的独立调用)。
max_connections可以增加(通过更改my.cnf和重新启动)。2000年是高的,但不是不合理的。
当你有超过几十个连接实际上在做一些事情时,问题就出现了,而不是“睡眠”。(见SHOW PROCESSLIST;)
MySQL连接相当快速;“池”还有其他问题,因此它不一定会带来更多的好处而不是伤害。连接具有"state",包括@变量、tmp表等,需要在请求连接时重新设置,并且它来自“池”。
https://stackoverflow.com/questions/29505692
复制相似问题