【问题标题】:Connection Timeout and Connection Lifetime连接超时和连接寿命
【发布时间】:2011-02-14 11:26:48
【问题描述】:

connection timeout=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)

连接池有什么用?

【问题讨论】:

    标签: timeout connection connection-pooling lifetime


    【解决方案1】:

    超时是您在放弃之前等待请求响应的时间。 TimeOut=0 意味着您将一直等待连接永远发生。很好,我想如果你连接到一个非常慢的服务器,如果需要 12 个小时来响应是正常的:-)。一般是坏事。您想对请求设置某种合理的超时时间,以便您可以意识到您的目标已经失败并继续您的生活。

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

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

    总而言之:
    ConnectionTimeout=0 不好,将其设为合理的值,例如 30 秒。
    ConnectionLifetime=0 没问题
    ConnectionPooling=disabled 不好,您可能会想要使用它。

    【讨论】:

    • 请问您是否知道这个错误是如何出现的? '无法连接到任何指定的 MySQL 主机。'
    • 您的服务器没有响应。可能已关闭,无法在正确的端口上打开,可能是防火墙等。需要更多详细信息
    • 我更喜欢 ConnectionLifetime 的详细描述,而不是 mysql 文档。
    【解决方案2】:

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

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

    但是,当数据库服务器被配置为终止超过最大空闲时间的数据库连接时,连接池成为一个问题,因为数据库服务器可能会终止可能仍驻留在连接池。在这种情况下,Connection Lifetime 可能会派上用场来丢弃这些连接,因为它们已经被服务器关闭了。

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多