连接超时和连接生命周期

25

连接超时为0的优缺点是什么?

Connection Lifetime=0有什么用途?

例如:

(Database=TestDB;
 port=3306;
 Uid=usernameID;
 Pwd=myPassword;
 Server=192.168.10.1;
 Pooling=false;
 Connection Lifetime=0;
 Connection Timeout=0)

连接池的作用是什么?

2个回答

44

超时(Timeout)是指在放弃请求前等待响应的时间长度。TimeOut=0表示您将一直等待连接,直到永远。如果您连接到非常慢的服务器并且需要花费12个小时来响应,那么这也是可以的😊。但通常情况下会出现问题。为了及时发现目标是否出现故障并继续进行操作,请在请求上设置合理的超时时间。

连接寿命(Connection Lifetime) = 在重新创建之前连接存在的时间长度。寿命为0表示永远不会重新创建。通常情况下没有问题,因为杀死和重新创建连接很慢。但通过各种错误可能会导致连接陷入不稳定状态(例如处理奇怪的三方交易)。但99%的情况下,将连接寿命保持无限是好的。

连接池(Connection pooling)是一种处理连接生成非常缓慢的方式。因此,而不是对每个请求创建一个新的连接,相反地提供一个预先准备好的连接池,例如10个连接。当您需要一个连接时,可以借用一个,使用它,然后将其返回。您可以调整池的大小来更改应用程序的行为。更大的池=更多的连接=更多的线程同时运行,但这可能会使您正在进行的任何操作不堪重负。

总结:
ConnectionTimeout=0是不好的,将其设置为合理的时间,例如30秒。
ConnectionLifetime=0是可以的。
ConnectionPooling=disabled是不好的,您可能需要使用它。


请问您对这个错误的原因有什么想法吗? “无法连接到指定的任何MySQL主机。” - Mark
您的服务器没有响应。可能是宕机了,也可能没有在正确的端口上打开,还可能是防火墙等原因。需要更多详细信息。 - bwawok
1
我更喜欢ConnectionLifetime的冗长描述,而不是mysql文档。 - Nicholi
在池中,将最小连接数设置为与最大连接数相同是否有任何不合理之处?当HTTP请求数量激增时,我们可能会创建大量的HTTP连接,这会导致缓慢并使其进入不健康状态。 - Zvi Mints

17

我知道这是一个旧的线程,但我认为指出一个情况很重要,在这种情况下,您可能希望禁用连接池或使用连接生命周期。

在某些环境中(特别是在使用Oracle时,或者至少在我的经验中),Web应用程序是设计成使用用户的凭据与位于服务器配置文件中的固定连接字符串连接到数据库。在这种情况下,启用连接池将导致服务器为访问网站的每个用户创建一个连接池(参见 连接池碎片化)。根据情况,这可能是好事情也可能是坏事情。

然而,当数据库服务器配置为由于最大空闲时间超过而终止数据库连接时,连接池会成为一个问题,因为数据库服务器可能会杀死仍驻留在连接池中的连接。在这种情况下,连接生命周期 可以派上用场,丢弃这些已被服务器关闭的连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接