【问题标题】:c3p0: what does `maxIdleTime` really mean?c3p0: `maxIdleTime` 的真正含义是什么?
【发布时间】:2017-05-06 06:15:32
【问题描述】:

在c3p0中,maxIdleTime的意思是:

maxIdleTime:(默认值:0)连接在被丢弃之前可以保持池化但未使用的秒数。零表示空闲连接永不过期。

我不明白。比方说,如果连接池中有10个等待连接,并且在maxIdleTime过去之后,仍然没有新的数据库请求,那么这些连接都应该被丢弃吗?那么池中将有0个等待连接?

【问题讨论】:

    标签: database c3p0


    【解决方案1】:

    如果您保持较大的池大小(即大于您预期的第 99 个百分位负载),这将意味着您将有大量空闲连接,最好通过 定期清理它们maxIdleTimeidleConnectionTestPeriod 参数

    可能,您还需要添加 idleConnectionTestPeriodpreferredTestQuery 确保连接有效或无效

    【讨论】:

      【解决方案2】:

      如果池中有10个Connection并且没有活动,那么在maxIdleTime过去之后,是的,它们都会过期。

      但这并不意味着池中没有任何连接。在池过期旧连接的同时,它将从 DBMS 获取开始新的连接,以维护minPoolSize 配置参数。

      【讨论】:

      • 那么为什么需要设置maxIdleTime呢?将新连接放入池中比让这些“过期”的连接留在池中要贵一些
      • 您设置了maxIdleTime,因为您不信任闲置时间过长的连接,您担心它们可能已被 DBMS 过期失效或以其他方式损坏。如果您不想替换长空闲连接,而只想缩小池,则可以使用maxIdleTimeExcessConnections 代替(或另外)。
      猜你喜欢
      • 2016-09-20
      • 2017-05-06
      • 2012-03-30
      • 2011-10-10
      • 2012-08-03
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多