关于MySQL的 too many connections

32 篇文章 0 订阅

http://www.phpv5.com/blog/too-many-connections

  网上有不少这方面的文章, 一些文章介绍通过增加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 ,还是要透过具体的参数看本质才能真正滴解决问题!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL "too many connections"错误是由于达到了MySQL的最大连接数限制而导致的。您可以通过以下几个步骤来解决这个问题: 1. 首先,您可以使用命令`show variables like '%max_connections%';`来查看MySQL允许的最大连接数。 这个值通常是由MySQL配置文件中的max_connections参数设置的,默认情况下为150。 2. 您还可以使用命令`show status like 'Max_used_connections';`来查看MySQL在当前运行期间的最高连接数。 如果这个值接近或等于最大连接数限制,那么可能是因为您的应用程序或数据库负载导致了太多的连接请求。 3. 如果您发现MySQL的最大连接数设置较低,并且您的应用程序需要更多的连接数来处理并发请求,您可以尝试增加最大连接数的限制。可以通过修改MySQL配置文件(my.cnf)中的max_connections参数来实现。 但是请注意,增加最大连接数也会增加系统资源的使用量,因此需要谨慎地评估您的服务器的硬件和资源限制。 4. 另外,您还可以通过优化您的应用程序和数据库查询来减少连接数。这可以包括使用连接池技术来管理数据库连接,以及优化代码和查询以降低数据库负载。 综上所述,解决MySQL "too many connections"错误的方法包括增加最大连接数限制、优化应用程序和数据库查询,以及使用连接池等技术来管理数据库连接。请根据您的具体情况选择适合的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Mysql报错:too many connections原因及解决方法](https://blog.csdn.net/B001XFX/article/details/132172241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [MySQL:Too many connections如何解决](https://blog.csdn.net/zhizhengguan/article/details/122083507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值