我最近工作的項目需要檢查我們的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大小問題時也非常有用。
我希望這有助於