Sql 增加最大池大小和性能
在我的ASP.net网站中,我与SQL Server Express数据库建立了连接。有时候我会犯很多错误,比如 System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小 搜索错误后,我发现可能是由于SQL Server连接未关闭。但是我已经正确地使用了SQL Server连接,并且已经正确地处理了它。我已经使用using语句来处理连接。在我的应用程序中,我在一天中的某个高峰时间收到很多请求(到SQL Server数据库的连接) 因此,我计划增加最大池大小。现在我还没有在连接字符串中指定它。因此它将是100(默认值)。我计划增加到20000,这样我就不会出错了 那么,将最大池大小增加到这个数字会导致任何问题吗?增加最大池是否会导致性能问题 编辑: 下面是我如何在代码中使用Sql 增加最大池大小和性能,sql,asp.net,sql-server,connection-pooling,Sql,Asp.net,Sql Server,Connection Pooling,在我的ASP.net网站中,我与SQL Server Express数据库建立了连接。有时候我会犯很多错误,比如 System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小 搜索错误后,我发现可能是由于SQL Server连接未关闭。但是我已经正确地使用了SQL Server连接,并且已经正确地处理了它。我已经使用using语句来处理连接。在我的应用程序中,我在一天中的某个高峰
的示例
Using con1 As New SqlConnection
con1.ConnectionString = "" //conn string here
con1.Open()
doSomething()
End Using
Using con2 As New SqlConnection
con2.ConnectionString = "" //conn string here
con2.Open()
doSomething()
Using con3 As New SqlConnection
con3.ConnectionString = "" //conn string here
con3.Open()
doSomething()
End Using
End Using
Catch ex As Exception
End Try
编辑:
我刚刚在应用程序中将最大池大小设置为20000进行了测试,以检查最大池是否真的导致了此问题。我希望不再出现此异常。但它没有解决问题,或者可能不是错误的原因。在设置了最大池之后,我在3小时的时间内出现了50次以上的错误。所以我怀疑这是否真的是因为游泳池的大小?错误消息指出“发生这种情况的原因可能是所有池连接都在使用,并且达到了最大池大小”。那么,是否还有其他情况显示相同的错误消息?请帮助。如果需要,您可以增加池大小。有两个缺点:
更多的连接意味着更多的资源使用
SQL Server的连接限制约为30k个连接。当您耗尽它时,您将失去可用性
我建议你慢慢往高处走。不要立即将池大小增加到20k。想想20k连接意味着什么:它意味着大约20k个线程(如果一个线程使用多个连接,则更少)同时执行。如果您处于该位置,则可能存在负载问题
你为什么需要这么多的连接?对于web应用程序,通常每个正在运行的请求在同一时间只打开一个连接。在大多数情况下,几百个就足够了
尽量缩短每个连接必须打开的持续时间。增加池大小只会缓解症状,而不是问题的核心。我怀疑您没有使用using
-语句总是尽快关闭连接,是吗?此外,一般避免静态连接,尤其是在ASP.NET中。您的查询需要多长时间,也许您也应该对其进行优化。但是,SQL Server express似乎有一些限制(比如一个CPU)可能会导致此问题:您能否向我们展示一些如何打开和关闭DB连接的代码?我也有类似的问题,我发现很有帮助。@Dura是的,我正在使用“将连接用作新的SqlConnection”(connectionString)和“End Using”正确。我正在使用windows server 2008 r2操作系统。