我最近工作的项目需要检查我们的SQL查询的时间,并将它们输出到调试模式下的调试侦听器。通过这种方式,我们可以评估SQL查询的执行时间以及执行时间,以及调试我们的网站代码。
- 的executeQuery
- 的ExecuteNonQuery
- 的ExecuteScalar
他们确实使用了:
我通过集中了SQL查询到包装方法的3种类型的SQL方法,我们采用这样做Stopwatch类,但也有代码将查询转换为SQL语句,类似于在SQL Server Profiler中看到的。
每种方法是类似以下内容:
protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
Stopwatch st = new Stopwatch();
bool errorDetected = false;
try
{
comm.Parameters.Add(sqlParameters);
using(comm)
{
st.Start();
object returnValue = comm.ExecuteScalar();
st.Stop();
return returnValue;
}
}
catch(Exception)
{
errorDetected = true;
st.Stop();
throw;
}
finally
{
string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);
if(errorDetected)
{
Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
}
else
{
Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
}
}
}
这则输出DebugView.exe我们的SQL语句是这样的:
/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ; 1 params |--> completed NonQuery in 0.0016144 seconds.
这样做的好处是,虽然,是有是这些语句的瓶颈,我们可以直接将查询粘贴到SQL分析器中并获取查询的输出。这也意味着,如果您有查看日志文件的工具,则可以使用正则表达式来监视所用时间在特定范围内的位置。
所以,如果你想寻找超过0的查询。5秒,您可以搜索术语:
“在0 [5-9] \ d +” < - 一切超过0.5秒 或 更大 “在[1-9] \ d +” < - - 一切大超过1秒
这帮助我们非常关注我们的努力。它还可以帮助我们确定如果问题是数据库相关的,或者如上文提供的ASP.NET问题。
最后,有一个叫Fiddler这也可以帮助你诊断页面,因为他们来你的计算机的工具。这给你喜欢的文件大小,将图像/ CSS参考,下载时间信息。这在诊断ViewState大小问题时也非常有用。
我希望这有助于