2010-07-12 86 views
0

HI,SQL存儲過程從.NET調用

我有一個SQL存儲過程,這是我從我的asp.net(2.0)代碼使用 sqlCom.ExecuteNonQuery()調用,但它tooks約60到100秒完成,而我執行相同的SP從SQL查詢工具運行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(); 

} 
+0

HI, 我在執行SQL查詢的同時,在3秒鐘內從C#代碼調用同一個sp並完成同樣的sp時發生了SP執行問題 – 2010-07-12 11:01:04

+0

請發佈執行存儲過程的代碼。 – 2010-07-12 11:02:42

+0

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;如果(_blnIsTransEnabld == true) sqlCom.Transaction = _sqlT; sqlCom.CommandType = System.Data.CommandType.StoredProcedure; sqlCom.CommandText = strSpName; sqlCom.CommandTimeout = _sqlConn.ConnectionTimeout; return sqlCom.ExecuteNonQuery(); – 2010-07-12 11:09:36

回答

1

這通常是過時統計的症狀。建議你重新統計:

exec sp_updatestats 
1

我建議更新的統計數據或進行任何改動存儲過程直到你收集的執行計劃,因爲這將在緩存中刪除執行計劃和挫敗任何試圖進一步調查這是否是實際問題。

該計劃的下降可能會導致您認爲問題已解決,但如果問題是參數嗅探,它可能會重新出現。

首先按照此答案中的建議獲取SSMS和C#執行計劃。

Very different execution times of SQL query in C# and SQL Server Management Studio

一旦你得到了這些保存您可以更新XML對他們倆的你的問題?

編輯:實際上可能更好的辦法是使用SQL事件探查器捕獲Showplan XML Statistics Profile事件並獲取C#實際執行計劃。如果它是生產服務器,則不要讓探查器跟蹤運行的時間超過最小值。

0

首先,看看代碼,我希望你有一些東西來關閉你在這裏使用的連接。

至於你的問題,在你正在訪問的數據發出鎖定的事務處理中有另一個查詢掛起? 這將解釋很長的執行時間;如果您正在訪問的數據被其他查詢鎖定,則執行將等待鎖釋放或超時。

要確定是否存在鎖定問題,可以使用SQL Server Management Studio。打開管理/活動監視器以獲取掛起鎖的列表。

爲了防止鎖定問題,請確保您儘快提交或回滾所有未決事務。有幾種方法可以解決死鎖問題。通常,您可以通過重新排序事務中的查詢來阻止這一切。如果這不是一個選項,您可能需要更改事務的隔離級別或使用table hints

相關問題