最近一个项目不太稳定,客户一会就反应进不去系统了,后台报了mysql超出最大连接数
Mysql 的连接通常是一个请求占用一个连接,如果该请求(update,insert,delete,select)长时间没有执行完毕,则会造成连接的堆积,迅速的消耗完数据库的连接数,这个时候技术支持人员就要登录数据库进行排序,看看到底是那些sql 占用了连接;
通过SHOW FULL PROCESSLIST;查看数据库中有长时间没有执行完成的sql,一直占用着连接没有释放,而应用的请求一直持续不断的涌入数据库,这个时候数据库的连接很快就被使用完;所以这个时候需要排查为什么这些sql 为什么长时间没有执行完毕,是索引没有创建好,还是sql执行耗时严重。
最后排查出来一个sql运行之后mysql直接就卡死,然后贴到本地开始走在了优化sql的路上,该加的索引都加上了还是不行,最后将问题锁定了。
(SELECT @i:=0)
没错,问题出在了这个自动生成序号的东西上,最开始开发的时候数据量小,这个东西用的挺爽,上线之后数据量开始大起来,这个东西就不行了。
感觉以后再也不会用这个东西了>_<