我的网站遇到了一些问题。在我的网站繁忙时间(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"/>
有什么想法吗?
谢谢!
答案 0 :(得分:0)
我可以通过长时间运行的sql生成超时,我注意到你使用的是没有参数的存储过程来选择数据,它返回的数据集有多大?
如果它足够大则会产生超时。如果是这种情况,则必须引入where参数来处理具有较小结果集的查询。