C# Nhibernate连接池问题
我们在一个MVC3 web应用程序上遇到了Nhibernate连接池问题,该应用程序使用SQL Express运行,并处理多个基于AJAX的并发请求 每隔一段时间(间隔数小时),我们就会看到错误开始,显示: NHibernate.Util.ADOExceptionReporterC# 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
超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小 然后是一堆 准备时选择顶部(@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