问题描述
进行压力测试,mysql 数据库报错 1040 - too many connection 。
问题分析
当压力测试超过mysql最大连接数,并且没有来得及释放,会造成无连接可用。
有可能是因为sql太慢,或者并发数太高。
可以通过命令查询数据库实时连接数量,如果超过设置的连接数,就会报错。
select * from information_schema.processlist;
解决方案
1.查看最大连接数
show variables like 'max_connections';
默认151个
将数值调大 修改为 1000
set GLOBAL max_connections=1000
2.查看连接失效时长
show global variables like 'wait_timeout';
默认8小时
缩短连接失效时长 300秒
set global wait_timeout=300;
3.杀掉sleep连接,避免浪费资源
select concat('KILL ',id,';') from information_schema.processlist where command='Sleep' and db= 'eas' ;
执行kill命令
KILL 4649668;
字段含义
- connect_timeout
mysql客户端在尝试与mysql服务器建立连接时,mysql服务器返回错误握手协议前等待客户端数据包的最大时限。默认10秒。
- interactive_timeout / wait_timeout
mysql关闭交互/非交互连接前等待的最大时限。默认28800秒。
- lock_wait_timeout
sql语句请求元数据锁的最长等待时间,默认为一年。此锁超时对于隐式访问Mysql库中系统表的sql语句无效,但是对于使用select,update语句直接访问mysql库中标的sql语句有效。
- net_read_timeout / net_write_timeout
mysql服务器端等待从客户端读取数据 / 向客户端写入数据的最大时限,默认30秒。
- slave_net_timeout
mysql从复制连结等待读取数据的最大时限,默认3600秒。
更多信息
参考文章 https://www.cnblogs.com/ivictor/p/5979731.html