首页 文章

不活动后关闭数据库连接

提问于
浏览
10

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

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 .

2 回答

  • 0

    你可以尝试使用Oracle Transparent Connection Caching,如果没有运气Mule .

    一些问题可以更好地理解案例:

    • 您正在使用哪种类型的连接器(jdbc /数据库)以及哪种版本的Mule?

    • 为什么你关心之后的连接?你在观察一些你不满意的症状吗?

  • 0

    通过JDBC进行的数据库连接旨在保持打开状态,以便重用 . 通常,包括下一代NoSQL数据库在内的大多数数据库技术都具有昂贵的启动和关闭成本 . 应用程序启动时应 Build 数据库连接,并在应用程序关闭时正常关闭 . 每次使用后都不应该关闭连接 .

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

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

相关问题