连接超时和连接生存期

问题描述:

连接超时= 0的优点和缺点是什么?连接超时和连接生存期

Connection Lifetime = 0的用途是什么?

e.g

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

,什么是使用连接池的?

超时是指您在放弃之前等待来自请求的响应所需的时间。 TimeOut = 0表示您将一直等待连接的发生。好,我猜如果你连接到一个非常慢的服务器,这是正常的,如果需要12个小时的响应:-)。通常是一件坏事。您希望对请求进行某种合理的暂停,以便您可以意识到您的目标已经停止并继续您的生活。

连接生存期 =连接在死亡和重新创建之前的生命期。 0意味着永远不会杀死并重新创建。通常不是坏事,因为杀死和重新创建连接很慢。通过各种错误,你的连接可能会陷入不稳定的状态(就像处理奇怪的3路事务时一样)。但是99%的时间很好地保持连接的生命期是无限的。

连接池是一种处理创建连接非常缓慢的事实的方法。因此,不是为每个请求建立新的连接,而是建立一个说10个预制连接的池。当你需要一个,你借用一个,使用它,并返回英寸你可以调整池的大小,以改变你的应用程序的行为。更大的池=更多的连接=更多的线程在同一时间做的东西,但这也可能压倒你正在做的任何事情。

总结:
ConnectionTimeout = 0是坏,让一些合理的好像是30秒。
ConnectionLifetime = 0没问题
ConnectionPooling = disabled是坏的,您可能会想要使用它。

+0

我可以知道你对这个错误是如何产生的吗? '无法连接到任何指定的MySQL主机。' – Mark 2010-05-01 08:08:47

+0

您的服务器没有响应。可能是down,无法在正确的端口上打开,可能是防火墙等。需要更多详细信息 – bwawok 2010-05-02 20:03:17

+1

我喜欢ConnectionLifetime和mysql文档的更详细的描述。 – Nicholi 2012-03-29 21:05:53

我知道这是一个旧线程,但我认为指出一个您可能希望禁用连接池或使用连接生存期的实例很重要。

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

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