我们有一个用Java编写的Web服务,它连接到Oracle数据库以进行数据提取。最近,我们在JDBC数据库中遇到了太多非活动会话,这是我们的Web服务。
我们非常确定所有连接都已关闭,并在每个进程后设置为null。
任何人都可以帮助我们吗?为什么它会导致数据库中的非活动会话以及可以解决此问题的方法。
谢谢。
答案 0 :(得分:8)
究竟是什么问题?
通常,中间层应用程序服务器会创建连接池。当您的代码请求连接时,它从池中获取已经打开的连接,而不是经历产生与数据库的新连接的开销。当您的代码关闭连接时,连接将返回到池,而不是通过物理关闭连接的开销。这意味着在任何给定的时间点,STATUS
V$SESSION
中的V$SESSION
都是“非活动”的数据库将有合理数量的连接。那是完全正常的。
即使在负载下,大多数时候,来自中间层的大多数数据库连接都是“非活动的”。状态“INACTIVE”仅表示在您运行查询的瞬间,会话未执行SQL语句。大多数连接将花费其大部分时间要么坐在连接池等待Java会话打开他们或等待在Java会议做对数据进行处理或等待网络传送到计算机之间传输数据上。
您实际上是否收到错误(即ORA-00020:超出了最大进程数)?或者您只是对{{1}}中的条目数量感到困惑?