不寻常的SQL服务器超时已过期

时间:2015-11-26 12:21:00

标签: asp.net sql-server vb.net sql-server-2012 timeout

我的网站遇到了一些问题。在我的网站繁忙时间(300-400个并发用户)的每一天,用户开始收到很多" Timeout Expired"错误消息。网页每隔几个小时就会挂起并暂停2-3分钟。

在错误的情况下,收到的错误消息只是"超时过期",但有时它们会更多关于最大池大小。我不确定它是否是游泳池大小,或者这只是超时的症状。

System.Web.HttpException (0x80004005): Unable to connect to SQL Server session database. ---> 
System.InvalidOperationException: Timeout expired. 
The timeout period elapsed prior to obtaining a connection from the pool. 
This may have occurred because all pooled connections were in use and max pool size was reached. 

以下是我的数据库功能的示例:

Public Function StoredProcedureDataSet(ByVal strStoredProcedureName As String, ByVal cmd As SqlClient.SqlCommand) As DataSet
    cmd.CommandType = CommandType.StoredProcedure
    cmd.CommandText = strStoredProcedureName
    cmd.Connection = conn
    cmd.CommandTimeout = 0
    Dim objDA As New System.Data.SqlClient.SqlDataAdapter
    Dim objDataSet As New DataSet
    Try
        conn.Open()
        objDA.SelectCommand = cmd
        objDA.Fill(objDataSet)
    Catch ex As Exception
        Throw ex
    Finally
        StoredProcedureDataSet = objDataSet
        conn.Close()
        cmd.Dispose()
        objDataSet.Dispose()
    End Try
End Function

我确保连接在Try内部打开并在最后关闭,因此我无法打开连接。

我使用SQL服务器代替会话而不是应用程序池,所以我不确定它是否与之相关联。请注意,我有其他应用程序使用相同的数据库,当忙碌的应用程序发生超时时,它们将继续工作而没有任何问题,所以这可能暗示它与会话有关。

根据其他帖子的建议,我尝试将最大池大小更改为1024,但是没有帮助。也许它太低了?

    <sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=*********;Initial Catalog=*********;User ID=*********;Password=*********;Max Pool Size=1024;" cookieless="false" timeout="20"/>

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我可以通过长时间运行的sql生成超时,我注意到你使用的是没有参数的存储过程来选择数据,它返回的数据集有多大?

如果它足够大则会产生超时。如果是这种情况,则必须引入where参数来处理具有较小结果集的查询。