簡體   English   中英

從.net調用的sql存儲過程

[英]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(); 

}

這通常是統計數據過時的症狀。 建議您重建統計信息:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM