mysql连接数过多问题如何处理

分类:编程技术 时间:2024-02-20 15:48 浏览:0 评论:0
0
本文将详细讲解如何处理mysql连接数过多的问题。小编觉得还是比较实用的,所以分享给大家,作为参考。希望您读完本文后有所收获。

1.问题呈现
登录应用程序时出现Too Many Connections错误

检查发现mysql数据库服务器已达到max_connections上限

mysql > 显示诸如“max_connections”之类的变量;
+--------------------------------+-------+
|变量名 |值|
+----------------+-----+
|最大连接数 | 1900 |
+------ -----------+--------+
组中 1 行(0.00 秒)
< br/>mysql> show processlist;
已达到 1900 个会话。

thread_pool设置不会阻止会话数量增加。
mysql> 显示“thread_pool%”等变量;
+-------------------------------------------- --- -------+--------+
|变量名------------------+------+
|线程池算法                                                       thread_pool_max_unused_threads | 0 |
| thread_pool_prio_kickup_timer | thread_pool_prio_kickup_timer | 1000 |
|线程池大小| 16 |
| thread_pool_stall_limit | 线程池停顿限制6 |
+------------- ------------------------+----- -+
每组 6 行(0.00 秒)

2.问题解决
重启mysql服务。重启mysql服务后,mysql会话数确实下降了,但很快会话数就上升到了1900个。
判断不是MySQL服务器端会话没有释放,而是应用程序端会话没有释放。
重启应用的两台服务器,mysql会话数恢复正常。

3.结论
让我们f首先看一下 mysql 服务器上的会话保留时间:
mysql> 显示类似 '%wait_timeout%' 的变量;
+---- -----------------------+----------+
|变量名 |价值|
+-- ------------------------+----------+
| innodb_lock_wait_timeout | innodb_lock_wait_timeout | innodb_lock_wait_timeout 50 | 50
|锁等待超时| 31536000 |
|等待超时| 28800 |
+--------------------------+----- -----+
3 行set (0.00 sec)

mysql> 显示像“%interactive_timeout%”这样的变量;
+----------- ----------+--------+
|变量名 |价值|
+----------------- ----+--------+
|交互超时 | 28800 |
+---------------------+- ------+
1 行一组(0.00 秒)

interactive_timeout:服务器在关闭交互式连接之前等待活动的秒数。交互式客户端被定义为使用 mysql_real_connect() 中的 CLIENT_INTERACTIVE 选项的客户端。另请参阅 wait_timeout
wait_timeout:服务的秒数er 在关闭非交互式连接之前等待活动。当线程启动时,会话wait_timeout值根据全局wait_timeout值或全局interactive_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.ini配置文件MySQL 主目录%/bin.打开后,添加两个变量并赋值。

解决此问题的方法:
1.在客户端(在 MySQL Connector 中)使用连接池来减少客户端和服务器之间的活动连接数。
就是在客户端安装MySQL Connector
2.改进应用程序设计,以减少所需的活动连接数量并减少连接保持活动状态的时间。
从应用端减少并发数,减少每个会话的保留时间
3.通过调整 max_connections 来增加 MySQL 服务器处理的连接数(请记住,这会消耗额外的 RAM,而且仍然有限)
增加 mysql 服务器端的最大连接数设置,但会消耗大量内存内存

推荐第二种方法。由于当前应用程序会话保留时间为10分钟,因此建议降低该值。

这篇关于《如何处理mysql连接过多问题》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,请转发出去,让更多的人看到。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > mysql连接数过多问题如何处理

用户评论