什么可能导致超时从池中获取SQL连接?

时间:2013-09-08 07:59:23

标签: c# iis-7 sql-server-2012

我在IIS下部署了一个Web应用程序。它已经出现超时错误,我相信我已经将问题跟踪到没有正确处理SQL连接的代码。

这需要很多手术来修复,所以至少在我完成实现和测试新代码之前,正确地使用using块,我决定将连接池大小提升到天文数字。但这似乎没有帮助。我的连接字符串是:

  

Data Source = MyServer; Initial Catalog = MyDb; User ID = MyUser; Password = MyPwd; Max Pool Size = 10000

我的日志文件显示:

  

System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。

在此期间我一直保持性能监视器的开放状态,并且用户连接的数量最多可以达到150左右。所以我认为我们的连接已经不足了。

还有什么可能导致此错误?

1 个答案:

答案 0 :(得分:1)

不幸的是,SqlCommand不服从ConnectionString或SqlConnection的超时。它必须手动设置。这是因为连接字符串中提到的超时用于连接,而不是执行。所以请考虑通过代码设置它的超时时间。

var conn = new SqlConnection(cs);
var cmd = conn.CreateCommand();
cmd.CommandTimeout = conn.ConnectionTimeout;
...