mysql最大链接数问题及Thread stack overrun

本文介绍了数据库连接管理中的两个关键参数:最大可连接数max_connections及当前连接线程数threads_connected。详细解释了如何通过这两个参数判断数据库连接是否充足,并提供了设置max_connections的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统能不能连接数据库,关键要看两个数据:

1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。

2、数据库当前的连接线程数threads_connected。这是动态变化的。

如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝。

因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。

但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。

这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,

该 错误的简便的检查办法是,在刷新页面时,不断监视threads_connected的变化。如果max_connections足够大,而 threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技 术,threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。

查看max_connections

进入MySQL,用命令:show variables
查看数据库最大可连接数的变量值:max_connections

查看threads_connected

进入MySQL,用命令:show status
查看当前活动的连接线程变量值:threads_connected


设置max_connections

设置办法是在my.cnf文件中,添加下面的最后红色的一行:

--------------------------------------------------------------------------------

[mysqld]
port=3306
#socket=MySQL
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=194K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
set-variable = max_connections=32000


--------------------------------------------------------------------------------

修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。

注意:
1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;
2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;
3、添加了最大允许连接数,对系统消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。

 

注: ERROR 1436 (HY000): Thread stack overrun:  4508 bytes used of a 131072 byte stack, and 128000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack.

 

可通过上面方法改变set-variable = thread_stack=194K值

参考 http://wolfchina.blogbus.com/logs/2005/08/

适当的最大连接数取决于多个因素,包括你的硬件资源、数据库负载以及预期的并发连接数。 一般来说,可以使用以下公式来估计最大连接数:最大连接数 = (可用内存 - 其他进程使用的内存) / 单个连接所需的内存。 在 macOS 上,你可以通过以下步骤来估算单个连接所需的内存: 1. 打开终端,使用管理员权限登录到 MySQL 服务器。 2. 运行以下命令来查看当前 MySQL 的配置信息: ``` mysql> SHOW VARIABLES LIKE 'max_connections'; mysql> SHOW VARIABLES LIKE 'thread_stack'; mysql> SHOW VARIABLES LIKE 'thread_cache_size'; ``` 这些变量将告诉你当前的最大连接数、线程栈大小以及线程缓存大小。 3. 根据线程栈大小和其他相关因素,估算出单个连接所需的内存。 通常情况下,线程栈大小为 256KB,但也可以通过修改 `thread_stack` 变量来进行调整。如果你的应用程序需要较大的线程栈,那么单个连接所需的内存也会相应增加。 4. 根据硬件资源和负载情况,确定一个合适的最大连接数。你可以参考以下几点: - 确保你的服务器有足够的内存来支持所需的最大连接数。 - 考虑数据库负载的性质和预期的并发连接数。如果你的应用程序需要处理大量的并发连接,可能需要增加最大连接数。 - 监控系统资源使用情况,确保最大连接数不会导致服务器过载或性能下降。 总的来说,最大连接数需要根据具体情况进行调整和优化。建议在进行更改之前先备份配置文件,并进行适当的测试和监控,以确保服务器的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值