C# Nhibernate连接池问题

C# Nhibernate连接池问题,c#,sql-server,nhibernate,asp.net-mvc-3,database-connection,C#,Sql Server,Nhibernate,Asp.net Mvc 3,Database Connection,我们在一个MVC3 web应用程序上遇到了Nhibernate连接池问题,该应用程序使用SQL Express运行,并处理多个基于AJAX的并发请求 每隔一段时间(间隔数小时),我们就会看到错误开始,显示: NHibernate.Util.ADOExceptionReporter 超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小 然后是一堆 准备时选择顶部(@p0) .. 出现错误 我们必须回收IIS应用程序池,以防止在此之后抛出5

我们在一个MVC3 web应用程序上遇到了Nhibernate连接池问题,该应用程序使用SQL Express运行,并处理多个基于AJAX的并发请求

每隔一段时间(间隔数小时),我们就会看到错误开始,显示:

NHibernate.Util.ADOExceptionReporter
超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小

然后是一堆

准备时选择顶部(@p0)
..
出现错误

我们必须回收IIS应用程序池,以防止在此之后抛出500个错误

查看SQL Server,我们可以看到:

select * from sys.dm_exec_sessions
。。。提供ID大于51的约30个会话(即用户会话)

。。。提供的数量大致相同

但是

。。。给出了79022的结果

这是否表示连接从未释放

Nhibernate会话在请求的生存期内

有没有人有过类似的经历,或者可以为我们指出正确的方向

非常感谢

Richard

您不能拥有比SQL Server更多的连接

还提供(我的粗体)

返回自SQL Server上次启动以来成功或不成功的尝试连接数。

非电流连接

我怀疑你的游泳池设置不正确,所以它很快就耗尽了


或者您没有正确释放连接,并且在回收IIS后正在检查SQL Server。

+1关于释放连接;检查为每个请求分配和释放会话的代码,并确保您正确地处理了会话。@Richard:谢谢您接受。我对您在调查中发现的问题很感兴趣。我发现我必须将连接池计数从100增加到200,并且从此不再出现这些错误。我并不完全满意这个解决方案,因为我相信这个应用不需要这么多,但是嘿。理查德:这很简单,在峰值负载时,你有100多个活动连接,对你的系统来说完全正常。
select * from sys.dm_exec_connections 
select @@connections