本文将详细解释如何处理mysql中连接过多的问题。边肖觉得很实用,分享给大家参考。希望你看完这篇文章能有所收获。
1.问题陈述
应用程序登录中连接过多时报告的错误
请检查mysql数据库服务器是否已达到max_connections上限。
mysql显示像“max_connections”这样的变量;
- -
|变量名|值|
- -
| max_connections | 1900 |
- -
1行一组(0.00秒)
mysql显示processlist
会话数已达到1900个。
thread_pool设置不会阻止会话数量的增加。
mysql显示像“thread_pool%”这样的变量;
- -
|变量名|值|
- -
|线程池算法| 0 |
|线程池_高优先级_连接| 0 |
| thread _ pool _ max _ unused _ threads | 0 |
| thread _ pool _ prio _ kickup _ timer | 1000 |
| thread_pool_size | 16 |
| thread_pool_stall_limit | 6 |
- -
6行一组(0.00秒)
2.问题处理
重新启动mysql服务。重启mysql服务后,mysql中的会话数量确实减少了,但很快会话数量就上升到了1900个。
判断mysql服务器端的会话没有释放,但是应用端的会话没有释放。
重启应用的两台服务器,mysql会话数将恢复正常。
3.结论
我们先来看看mysql服务器的会话保持时间:
mysql显示像“%wait_timeout%”这样的变量;
- -
|变量名|值|
- -
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
- -
3行一组(0.00秒)
mysql显示像“%interactive_timeout%”这样的变量;
- -
|变量名|值|
- -
| interactive_timeout | 28800 |
- -
1行一组(0.00秒)
Interactive_timeout:服务器在关闭交互连接之前等待活动的秒数。交互式客户端被定义为在mysql_real_connect()中使用CLIENT _ INTERVAL选项的客户端。另请参见wait_timeout。
Wait_timeout:服务器在关闭非交互连接之前等待活动的秒数。当线程启动时,会话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 HOME%/bin下有一个mysql.ini配置文件。打开后,添加两个变量并赋值。
要解决这个问题:
1、在客户端使用连接池(在MySQL Connector中)来减少客户端和服务器之间的活动连接数。
是的,在客户端安装MySQL连接器。
2、改进应用程序设计,以减少所需的活动连接数,并减少连接保持活动状态的时间。
从应用程序方面,减少并发的数量和每个会话的保持时间。
3、通过调整max_connections来增加MySQL服务器处理的连接数(请记住,这会消耗额外的内存,并且仍然是有限的)
增加mysql服务器上的最大连接数,但会消耗大量内存。
建议第二种方法。因为当前应用程序会话保持时间为10分钟,所以建议降低该值。
这篇关于“如何处理mysql连接太多的问题”的文章就分享到这里了,希望。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/73049.html