【发布时间】:2014-08-25 06:15:05
【问题描述】:
我有一个 Spring MVC + Mysql (JDBC 4) + c3p0 0.9.2 项目。
在 c3p0 中 maxIdleTime 的值为 240(即 4 分钟)和 wait_timeout 在 Mysql 的 my.ini 中为 30 秒。
根据 c3p0
最大空闲时间: (默认值:0) 在被丢弃之前,连接可以保持池化但未使用的秒数。零表示空闲连接永不过期。
根据Mysql
wait_timeout:服务器等待活动的秒数 关闭之前的非交互式连接。
现在我对此有一些疑问:(我知道一些答案,只是想确定我是否正确)
- 未使用的连接是指根据mysql(?)处于
sleep状态的连接 - 什么是交互式和非交互式连接?
- 未使用的连接和非交互式连接是否相同?因为我的 DBA 将
wait_timeout设置为 30 秒(他通过观察数据库服务器来达到这个值,因此处于睡眠模式的连接数量非常少)这意味着一个连接可以在 30 秒后处于sleep模式被关闭,但另一方面 c3p0 的maxIdleTime设置为 240 秒,那么这个maxIdleTime设置在这种情况下扮演什么角色。 - 什么是
interactive_timeout?
【问题讨论】:
-
处于睡眠模式的连接很可能是池中的非活动连接。它们不应该关闭得太快,因为让您的池在下一次请求时重新创建它们的成本很高。为什么您的 DBA 建议将 wait_timeout 设置为 30 秒?
-
@flup,因为在负载测试时我观察到
show full processlist向我显示number of connections in DB=maxPoolSize并且我不断收到Connections could not be acquired from the underlying database!异常。我发布了这个问题,请阅读更多内容和一个stackoverflow.com/questions/24451317/…
标签: java mysql jdbc database-connection c3p0