Asp.net

從 Web 呼叫儲存過程時速度慢,從 Management Studio 呼叫時速度快

  • July 5, 2011

我的儲存過程每次從 Web 應用程序呼叫時都會瘋狂超時。

我啟動了 Sql Profiler 並跟踪了超時的呼叫,最後發現了這些事情:

  1. 當從 MS SQL Management Studio 中執行語句時,使用相同的參數(實際上,我從 sql 配置文件跟踪複製了過程呼叫並執行它):平均在 5~6 秒內完成。
  2. 但是當從 Web 應用程序呼叫時,它需要超過 30 秒(跟踪),所以我的網頁實際上超時了。

除了我的 Web 應用程序有自己的使用者這一事實之外,每件事都是相同的(相同的數據庫、連接、伺服器等)我還嘗試使用 Web 應用程序的使用者直接在工作室中執行查詢,並且不需要超過 6 個秒。

我如何知道發生了什麼?

我假設這與我們使用 BLL > DAL 層或表適配器這一事實無關,因為跟踪清楚地表明延遲存在於實際過程中。這就是我能想到的。

編輯我在此連結中發現 ADO.NET 設置ARITHABORT為 true - 這在大多數情況下都很好,但有時會發生這種情況,建議的解決方法是向with recompile儲存的 proc 添加選項。就我而言,它不起作用,但我懷疑它與此非常相似。任何人都知道 ADO.NET 還能做什麼或我在哪裡可以找到規範?

過去我也遇到過類似的問題,所以我很想看到這個問題的解決方案。Aaron Bertrand 對 OP 的評論導致Query 在從 web 執行時超時,但從 SSMS 執行時超快,雖然問題不是重複的,但答案很可能適用於您的情況。

從本質上講,S​​QL Server 可能有一個損壞的記憶體執行計劃。您的 Web 伺服器遇到了錯誤的計劃,但 SSMS 採用了不同的計劃,因為 ARITHABORT 標誌上有不同的設置(否則對您的特定查詢/儲存過程沒有影響)。

另一個例子見ADO.NET呼叫T-SQL儲存過程導致SqlTimeoutException,有更完整的解釋和解決方法。

引用自:https://stackoverflow.com/questions/6585417