连接超时和连接生命周期

时间:2010-05-01 02:55:55

标签: timeout connection connection-pooling lifetime

连接超时= 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 个答案:

答案 0 :(得分:29)

超时是指您在放弃之前等待请求响应的时间。 TimeOut = 0表示您将一直等待连接发生。好,我想如果你连接到一个非常慢的服务器,这是正常的,如果它需要12个小时来响应:-)。一般都是坏事。你想在请求上加上某种合理的超时,这样你就可以意识到你的目标已经停止并继续你的生活。

连接生命周期 =连接在被杀死和重新创建之前所处的时间。一生0意味着永远不会杀死和重新创造。通常不是坏事,因为杀死和重新创建连接很慢。通过各种错误,您的连接可能会陷入不稳定状态(例如处理奇怪的3路事务时)。但99%的情况下保持连接生命周期是无限的。

连接池是一种处理创建连接非常慢的事实的方法。因此,不是为每个请求建立一个新的连接,而是拥有一个10个预制连接池。如果需要,可以借用一个,使用它,然后返回。您可以调整池的大小以更改应用程序的行为方式。更大的池=更多的连接=更多的线程一次做的东西,但这也可能压倒你正在做的任何事情。

总结:
ConnectionTimeout = 0 很糟糕,让它像30秒一样合理。
ConnectionLifetime = 0 没关系 ConnectionPooling =已禁用很糟糕,您可能希望使用它。

答案 1 :(得分:9)

我知道这是一个旧线程,但我认为指出一个您可能想要禁用连接池或使用连接生命周期的实例非常重要。

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

但是,当数据库服务器配置为终止超过最大空闲时间的数据库连接时,连接池成为问题,因为数据库服务器可能会终止仍可能驻留在连接池。在这种情况下,连接生命周期可能会派上用场扔掉这些连接,因为它们已被服务器关闭。