Oracle UCP PoolDataSource中inactiveConnectionTimeout与maxIdleTime的区别
Oracle UCP
inactiveConnectionTimeout 和 maxIdleTime 到底有啥区别? 先把官方文档里的核心定义翻译清楚:
inactiveConnectionTimeout(非活动连接超时)
官方说明翻译:设置连接被应用持有期间,允许处于无操作状态的最长时间(单位:秒)。如果连接被应用拿着,但在超时时间内没做任何数据库操作,UCP会主动把这个连接收回来,收之前会调用
close(),之后应用再想用这个连接就会报错。
maxIdleTime(最大空闲时间)
官方说明翻译:设置连接在连接池的空闲队列里能待的最长时间(单位:秒)。当连接被归还到池里后,如果超过这个时间还没被应用借走,UCP就会把它从池里删掉并关闭。
最核心的3个区别
- 管的连接状态不一样
inactiveConnectionTimeout盯的是被应用借走、攥在手里但一直闲置的连接maxIdleTime盯的是已经还给池、躺在空闲池里没人要的连接
- 触发回收的时机不一样
- 前者是应用拿着连接却长期不用,直接从应用手里抢回来
- 后者是连接回池后长期没人借,从空闲池里清掉
- 对应用的影响不一样
- 触发
inactiveConnectionTimeout后,应用再用这个连接会直接报错,得重新拿新连接 - 触发
maxIdleTime只是池子里少个闲置连接,对正在用连接的应用完全没影响
- 触发
什么时候用哪个?
- 怕应用"占着茅坑不拉屎"(比如代码漏了释放连接,或者长期持有连接却不操作),就设
inactiveConnectionTimeout - 想控制空闲池的连接数,避免闲置连接浪费数据库资源,就设
maxIdleTime
内容的提问来源于stack exchange,提问作者Vikas Tyagi
相关产品推荐
相关产品推荐

