当前位置: 首页 > 科技观察

如何解决MySQL连接数过多的问题?

时间:2023-03-16 10:42:35 科技观察

MySQL数据库默认的最大连接数为:100,对于多人开发的单个项目,虽然我们不会同时使用超过10个连接,但理论上100个绰绰有余,但除了对于我们正在使用的连接之外,还有很大一部分是Sleep连接,这才是真正的罪魁祸首。分析出问题的根源,我们需要对症下药,依次解决:修改MySQL最大连接数。首先查看Mysql当前最大连接数:showvariableslike'%max_connections%';我这里修改了,所以是1000,没修改。童鞋们应该还是100,然后查看mysql服务启动到现在的同时最大并行连接数:showstatuslike'Max_used_connections';MySQL的最大连接数设置,第一次配置时设置一个较大的值,在以后的使用过程中,定期查询Max_used_connections,然后根据当前项目确定一个最适合当前项目的最大连接数其价值和服务器的性能。修改最大连接数有两种方式。无效):setglobalmax_connections=1000;1修改/etc/my.cnf。添加max_connections=1000永久有效。重启后会生效,但是改变最大连接数只能表面解决问题。随着我们开发人员的增多,Sleep连接会越来越多。如果到时候达到上限1000,是不是要改成10000??这显然是非常不可取的。因此,我们既要治标,又要治本。杀死多余的睡眠连接是一种永久性的治疗方法。我们可以使用show_processlist命令查看当前所有的连接状态,可以发现Sleep连接占了绝大多数。MySQL数据库有一个属性wait_timeout,就是sleep连接的最大存活时间,默认是28800s,换算成hours就是8小时,我的天啊!这也太长了吧!严重影响性能。相当于今天上班以来已经建立但没有关闭的所有连接都不会被清理掉。执行命令:showglobalvariableslike'%wait_timeout';我们将其修改为合适的值,这里我修改为250s。当然也可以在配置文件中修改,加入wait_timeout=250。这个值可以根据项目需要修改,单位是s。这里我结合navicat的超时请求机制配置了240s。执行命令:setglobalwait_timeout=250;这样就可以从根本上解决TooManyConnections的问题