我们在IIS 7.0,Windows Server 2008 R2和SQL Server 2008 R2 for DB上运行ASP.NET Web应用程序。
在周末,当stream量很高时,IIS服务器中的请求队列长度会增加(多达800个请求),然后每隔一分钟左右就会下降。
我可以看到,服务器正在处理一些请求,根据IISpipe理器中的“当前请求”视图,这些请求长时间运行(时间经过值从20到50秒)。
这些要求并不一定是沉重的疑问,实际上,我不明白他们为什么要这么长时间。
是否因为客户端正在closures他的连接?
谢谢你,谢洛米
它看起来像是连接池和许多开放连接的常见问题。 在你的DAL上,你应该有这样的东西(不要紧,如果它是mssql或mysql):
(我假设你正在使用DataReader)
/// <summary> /// Selects a single record from the Media table. /// </summary> public virtual Media Select(int mediaID) { SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@MediaID", mediaID) }; using (SqlDataReader dataReader = SqlClientUtility.ExecuteReader(connectionStringName, CommandType.StoredProcedure, "MediaSelect", parameters)) { if (dataReader.Read()) { return MakeMedia(dataReader); } else { return null; } } }
使用保证SqlDataReader将被正确处置。 这只是一个基本的例子,但通常你应该有(你可能有)所有提供连接助手和实现IDisposable的DAL操作的公共类。 我build议有一个基类,所有的DAL类派生自。
如果DAL不是这个问题,那么我build议使用SQL Server Profiler深入挖掘数据库来评估查询执行情况。
您还可以使用SQL Server Monitor来检查平均执行时间和未closures的连接。 如果您的DAL有问题,您会看到很多挂起/等待连接。