文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql中Too many connections问题怎么处理

2024-04-02 19:55

关注

这篇文章将为大家详细讲解有关mysql中Too many connections问题怎么处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1、问题展现
应用端登录出现Too many connections报错
mysql中Too many connections问题怎么处理
检查发现mysql数据库服务端已经达到了max_connections上限
mysql中Too many connections问题怎么处理
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1900  |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show processlist;
已经达到了1900会话数。

thread_pool设置并不能阻止会话数的上升。
mysql> show variables like 'thread_pool%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| thread_pool_algorithm                | 0     |
| thread_pool_high_priority_connection | 0     |
| thread_pool_max_unused_threads       | 0     |
| thread_pool_prio_kickup_timer        | 1000  |
| thread_pool_size                     | 16    |
| thread_pool_stall_limit              | 6     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

2、问题处理
重启mysql的服务。重启完mysql服务后,的确mysql的session数下降了,但是很快会话数又上升到了1900。
判断并不是mysql的服务器端的会话没释放,而是application端的会话没释放。
重启application的两台服务器,mysql的会话数恢复正常。

3、结论
先来看看mysql服务器端的会话保持时间:
mysql> show variables like '%wait_timeout%'; 
+--------------------------+----------+ 
| Variable_name | Value | 
+--------------------------+----------+ 
| innodb_lock_wait_timeout | 50 | 
| lock_wait_timeout | 31536000 | 
| wait_timeout | 28800 | 
+--------------------------+----------+ 
3 rows in set (0.00 sec) 

mysql> show variables like '%interactive_timeout%'; 
+---------------------+-------+ 
| Variable_name | Value | 
+---------------------+-------+ 
| interactive_timeout | 28800 | 
+---------------------+-------+ 
1 row in set (0.00 sec) 

interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout 
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout 
如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。 
MySQL的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。要修改就只能在配置文件里修改。Windows下在%MySQL HOME%/bin下有mysql.ini配置文件,打开后添加两个变量,赋值。 

要解决这个问题:
1、Use connection pooling at client side (in MySQL Connector) to reduce the number of active connections between the client and the server. 
是在客户端安装MySQL Connector
2、Improve the application design to reduce the number of active connections needed and to reduce the time the connection has to stay active. 
从应用端去降低并发数,减少每个会话的保持时间
3、Increase the number of connections handled by MySQL server by adjusting max_connections (keep in mind that this consumes additional RAM and is still limited)
在mysql服务器端增加最大连接数设置,不过会消耗大量内存

建议用第二种方法。因为当前应用会话保持时间是10分钟,建议降低这个数值。

关于“mysql中Too many connections问题怎么处理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯