【发布时间】:2016-05-20 05:34:59
【问题描述】:
我遇到了一个问题,当使用 NHibernate 连接到 Oracle11g 数据库时,池中的旧连接没有被关闭。
我相当确定所有 NHibernate 会话都已正确处理,但是连接仍保持在 INACTIVE 状态。我知道这将是因为连接池,但是在一定时间后应该将它们删除?如果不是,我该如何配置发生这种情况。
我已尝试将以下设置添加到我的连接字符串中:
Max Pool Size=10;
Connection Lifetime=120;
Incr Pool Size=1;
Decr Pool Size=10;`
这似乎停止创建尽可能多的连接,我猜是因为这个增加的大小是增量 1,但是一旦连接被放回池中,它们就永远不会关闭。
我查看了 v$session 表,其中一些 LASST_CALL_ET 值高达 786465 秒或 9 天!!
我很确定所有会话都已被处理,这是代码示例:
public class DoSomethingToDb(ISessionFactory sessionFactory)
{
using (ISession session = sessionFactory.OpenSession())
{
session.Transaction.Begin();
//Do Stuff
session.Transaction.Commit();
}
}
如何设置我的程序/NHibernate/Ado.Net/Oracle 以关闭不再使用的连接。
我们测试的服务器昨天崩溃了,因为有超过 800 个INACTVIE 连接,并且无法发出更多连接。
【问题讨论】:
标签: c# oracle nhibernate ado.net connection-pooling