[英]sql stored procedure calling from .net
嗨,
我有一個sql存儲過程,我正在使用sqlCom.ExecuteNonQuery()從asp.net(2.0)代碼中調用,但是要花大約60到100秒才能完成,而我從sql查詢工具執行相同的SP在3到4秒內運行。
請幫忙。
編輯-注釋中的代碼:
public int ExecuteNonQuery(string strSpName, DbParameter[] parameterValues)
{
CreateConnection();
SqlCommand sqlCom = new SqlCommand();
if (strSpName == null || strSpName.Length == 0)
throw new ArgumentNullException("strSpName");
int i = 0;
sqlCom.Connection = _sqlConn;
if (_blnIsTransEnabld == true)
sqlCom.Transaction = _sqlT;
sqlCom.CommandType = System.Data.CommandType.StoredProcedure;
sqlCom.CommandText = strSpName;
sqlCom.CommandTimeout = _sqlConn.ConnectionTimeout;
return sqlCom.ExecuteNonQuery();
}
這樣的關於查詢在SQL中快速但作為SP慢的問題可能是問題嗎?
這通常是統計數據過時的症狀。 建議您重建統計信息:
exec sp_updatestats
我建議您在收集執行計划之前 不要更新統計信息或對存儲過程進行任何更改,因為這會將執行計划丟棄在緩存中,並阻止進一步調查這是否是實際問題的任何嘗試。
計划的取消可能會導致您認為問題已解決,但是如果問題是參數嗅探,則很可能會再次出現。
首先按照此答案中的建議獲取SSMS和C#的執行計划。
C#和SQL Server Management Studio中SQL查詢的執行時間完全不同
保存完這些文件后,您可以使用XML來更新它們的問題嗎?
編輯:實際上可能更好的方法是使用SQL事件探查器捕獲Showplan XML Statistics Profile
事件並獲取C#的實際執行計划。 如果它是生產服務器,則不要使探查器跟蹤的運行時間超過最低要求。
首先,看一下代碼,希望您能在此處關閉正在使用的連接。
至於您的問題,是否有可能在事務中又有另一個查詢未決,而該事務已對您訪問的數據發出了鎖定? 那將解釋執行時間長; 如果您正在訪問的數據被其他查詢鎖定,則執行將等待釋放鎖或超時。
要確定是否存在鎖定問題,可以使用SQL Server Management Studio。 打開管理/活動監視器以獲取掛起的鎖的列表。
為防止鎖定問題,請確保盡快提交或回滾所有未決的事務。 有幾種方法可以解決死鎖。 通常,您可以通過例如對事務中的查詢重新排序來防止全部發生。 如果不是這樣,則可能需要更改事務的隔離級別或使用表提示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.