欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

关于MySQL的 too many connections

程序员文章站 2022-06-07 15:50:39
...

网上有不少这方面的文章, 一些文章介绍通过增加MySQL最大连接数的方法来解决too many connections的问题。 这是一种不负责任的说法, 既然可以通过增加最大连接数来搞定, 那mysql设计的时候又何必来搞这么个惹人厌的参数呢?直接不限制连接数不就永远不会

网上有不少这方面的文章, 一些文章介绍通过增加MySQL最大连接数的方法来解决too many connections的问题。 这是一种不负责任的说法, 既然可以通过增加最大连接数来搞定, 那mysql设计的时候又何必来搞这么个惹人厌的参数呢?直接不限制连接数不就永远不会出现这种 too many connections 的问题了?

分析问题本质

一切问题都要回到问题的本质。

任何一个东西存在都有它存在的价值, mysql 的最大连接数也是一样, 如果不限制最大连接数的话, 任何请求都可以随便联服务器, 当出现瞬间大量的连接的时候,机器的内存不是要撑爆掉了? 这样的情况导致整个mysql都挂掉了, 大家谁都不能用了, 所以说需要一个最大连接数这样的限制, 正常情况下大家都可以连, 但是如果连接数太多的话后边的人就 too many connections 错误了, 这一是一种自我保护的策略。

mysql默认的最大连接数是100,这个数值可以再大一点, 具体的情况要看机器的内存多大, 还要看连接mysql的应用的一些特征, 按照经验来说500够了。

排查问题

出了问题肯定是得排查,出现连接数过多的情况,不是所有的客户端都要排队等待吗? 还好MySQL设计的时候给我们留了后门, root用户可以比最大连接数多一个连接, 当系统出现问题的时候, root用户可以走绿色通道进去管理(一些开发人员不注意, 应用程序连接mysql直接用的root用户,这样一旦出现too many connections 这种情况, 绿色通道已经被占用了, 连不上服务器只有干着急的份了,另外程序直接用root账号也不安全, 安全问题不是本文讨论的重点, 我们暂且按下不表)

出现了 too many connections 的这种情况, 肯定是连接数用完了, 但是mysql 在干什么呢? 好比堵车了,你是交警你该怎么办呢? 首先要找到拥堵的原因吧。

1. 首先看一下系统的 CPU Load 内存 swap I/O参数, 帮助我们做原因的分析判断。

2. 祭出绝招, 查看 processlist; 看看 进程列表里边的执行状态 , 可以把卡住的进程先杀掉在做优化

1

2

3

4

5

6

7

8

#按state统计processlist

mysql -h 127.0.0.1 -u root -pPwd --skip-column-names -e "show processlist" | grep -v - | awk '{print $7}' | uniq -c

#按数据表统计processlist

mysql -h 127.0.0.1 -u root -pPwd --skip-column-names -e "show processlist" | grep -v - | awk '{print $4}' | uniq -c

#按照用户统计processlist

mysql -h 127.0.0.1 -u root -pPwd --skip-column-names -e "show processlist" | grep -v - | awk '{print $2}' | uniq -c

大多数连接状态是 sleep:

表示连接没有及时释放.

大多数连接状态是 locked。

表被锁定了, 可以看一下更新的时候有没有用到索引, 没用到索引的话加上索引。 如果数据表用的 MyISAM 存储引擎, 可以考虑改用InnoDB存储引擎.

大多数连接的状态是 sending

表示正在从硬盘读取数据, 可以考虑优化一下数据的读写, 尽可能的减少扫描的行数

?大多数连接的状态是 Free items

? ? ?说明I/O压力过大, 或者硬盘故障

?大多数的连接是Waiting for net, writing to net ,

? ? ?看看网络连接的问题。

? 其他的不常见的可以参照一下, show processlist , 然后做出相应的优化. 总之 很多种情况都会导致 too many connections ,还是要透过具体的参数看本质才能真正滴解决问题!!

声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权

转载请注明来源:小景的博客

本文链接地址:http://www.phpv5.com/blog/too-many-connections