首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不活动后关闭数据库连接

不活动后关闭数据库连接
EN

Stack Overflow用户
提问于 2016-09-22 14:14:00
回答 3查看 1.5K关注 0票数 11

我有一个连接到Oracle数据库的Mule应用程序。该应用程序是允许执行SQL存储过程的SOAP api。我的连接器设置为使用连接池,并且我一直在监控连接本身。我有一个最大池大小为20,当调用数据库时,我可以看到它们正在打开(netstat -ntl | grep PORTNUMBER)。

代码语言:javascript
复制
 tcp4       0      0  IP HERE     OTHER IP HERE       SYN_SENT
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4       0      0  IP HERE     OTHER IP HERE       ESTABLISHED
 tcp4      10      0  IP HERE     OTHER IP HERE       ESTABLISHED

当调用完成时,我预计连接将在一段时间后关闭。这种情况不会发生。我注意到,当应用程序在服务器上运行时,从7月份(也就是几个月前)起,连接仍然是打开的。

到目前为止,我发现的真正在几秒钟后关闭连接的惟一方法是启用XA事务并设置连接超时。然而,这完全扰乱了应用程序的性能,并且是不必要的开销。

在不使用XA连接的情况下如何添加这样的超时?我希望我的数据库连接在20秒不活动后关闭。

谢谢

编辑:使用通用数据库连接器- Mule版本3.8.0我们有允许到数据库的最大连接数,我们有此流的多个实例正在运行。这意味着连接被其中一个实例保留,导致其他实例无法获得新连接。

我们遇到的具体问题是,一个实例仍然保留了120个连接,即使它最后一次运行是在几周前。当第二个实例请求更多连接时,它只能获得30个连接,因为数据库端的最大连接数是150。

EN

回答 3

Stack Overflow用户

发布于 2020-04-26 06:35:57

您应该使用一个连接池实现,使您能够控制连接的生存时间。理想情况下,池还应该提供验证查询来检测陈旧查询。

例如,c3p0池有一个名为maxConnectionAge的配置,它似乎符合您的需要。maxIdleTime也可能会引起人们的兴趣。

票数 1
EN

Stack Overflow用户

发布于 2016-09-27 17:26:17

你可以尝试使用Oracle Transparent Connection Caching,如果你不想使用Mule.

为了更好地理解这个案例,有几个问题:

  1. 你使用的是哪种类型的连接器(jdbc/数据库),是哪个版本的Mule?
  2. ,你为什么要关心连接之后是否打开?你是否观察到了其他一些你不满意的症状?
票数 0
EN

Stack Overflow用户

发布于 2016-10-04 11:05:53

通过JDBC的数据库连接旨在保持开放状态,以便于重用。一般来说,大多数数据库技术,包括下一代NoSQL数据库,都有昂贵的启动和关闭成本。数据库连接应该在应用程序启动时建立,并在应用程序关闭时正常关闭。您不应该在每次使用后都关闭连接。

甲骨文提供了一个名为UCP的连接池。UCP提供了控制stale connections的选项,其中包括设置最大重用时间和非活动连接超时等选项。

这对于将资源返回到应用程序以及检查断开的连接非常有用。无论如何,在关闭连接之前,应该多次重用连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39631539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档