【发布时间】:2017-05-06 06:15:32
【问题描述】:
在c3p0中,maxIdleTime的意思是:
maxIdleTime:(默认值:0)连接在被丢弃之前可以保持池化但未使用的秒数。零表示空闲连接永不过期。
我不明白。比方说,如果连接池中有10个等待连接,并且在maxIdleTime过去之后,仍然没有新的数据库请求,那么这些连接都应该被丢弃吗?那么池中将有0个等待连接?
【问题讨论】:
在c3p0中,maxIdleTime的意思是:
maxIdleTime:(默认值:0)连接在被丢弃之前可以保持池化但未使用的秒数。零表示空闲连接永不过期。
我不明白。比方说,如果连接池中有10个等待连接,并且在maxIdleTime过去之后,仍然没有新的数据库请求,那么这些连接都应该被丢弃吗?那么池中将有0个等待连接?
【问题讨论】:
如果您保持较大的池大小(即大于您预期的第 99 个百分位负载),这将意味着您将有大量空闲连接,最好通过 定期清理它们maxIdleTime 和 idleConnectionTestPeriod 参数
可能,您还需要添加 idleConnectionTestPeriod 和 preferredTestQuery 确保连接有效或无效
【讨论】:
如果池中有10个Connection并且没有活动,那么在maxIdleTime过去之后,是的,它们都会过期。
但这并不意味着池中没有任何连接。在池过期旧连接的同时,它将从 DBMS 获取开始新的连接,以维护minPoolSize 配置参数。
【讨论】:
maxIdleTime,因为您不信任闲置时间过长的连接,您担心它们可能已被 DBMS 过期失效或以其他方式损坏。如果您不想替换长空闲连接,而只想缩小池,则可以使用maxIdleTimeExcessConnections 代替(或另外)。