2015-10-02 37 views
1

我知道在這裏有很多這樣的話題,但是想介紹一下我的具體例子。超時已過期。在完成操作或服務器之前超時的時間。等待操作超時 - 奇怪行爲

從Web應用程序(ADO.NET,ASP.NET MVC)運行操作時出現錯誤: 超時已過期。在完成操作或服務器之前超時的時間。等待操作超時

但從第二隻手直接運行db原始查詢(由profiler捕獲)只需要2秒。

背景:

  1. 問題突然出現(周發行後),只有在督促服務器發生。
  2. 超時這個特定的查詢是180秒,HTTP請求是24000 [單位] - 大概也是秒(每MSDN)
  3. 我們沒有全文索引發生僅當用戶搜索一個特定的查詢
  4. 錯誤通過一個「fretext」(普通文本框)字段生成查詢 以及附加的10-12 「或類似%value%」條件(從開始到完成的方式,並且沒有機會改變它)
  5. 什麼是奇怪非常類似的查詢(對於其他「免費文字」字段與相同數量的「或類似的%價值%」)工作克而沒有任何問題
  6. 事務隔離等級=序列化
  7. 數據綁定以相同的方式完成爲每個查詢(控制器 - >服務 - > DB->服務 - >視圖模型 - > HTML),實際上是我們的框架 從「選擇」查詢自動綁定字段查看模型
  8. 原始查詢(由探查器捕獲)快速運行(2-3秒),但從web應用程序級返回超時。
  9. 我沒有直接訪問prod服務器,所以即時通訊無法立即檢查一切,我也無法共享任何代碼/堆棧跟蹤。

建議:

找到很多類似的帖子,這個看起來特別有趣對我來說:https://stackoverflow.com/a/8603111,並且想了解清除統計(EXEC sp_updatestats)。

問:

你有類似的經歷,也許其他任何建議按照以上建議?原始查詢可以在短時間內運行,但從webapp獲取超時的原因是什麼?

回答

2
+0

非常有用的鏈接,我要檢查!順便說一句,「什麼可以修復」 - 有可能只做一些在數據庫操作(從短觀來看),你認爲exec sp_updatestats可以提供幫助嗎? – user2987281

+0

@ user2987281是的,更新統計數據將有所幫助。如果它是例如一個你調用的存儲過程,一個sp_recompile也會有所幫助。順便說一下:您還可以使用Profiler來監視執行計劃,這樣您就可以看到糟糕的執行計劃。但是這會降低數據庫的速度,因此只能在測試環境中使用它。 – ManOnAMission

+0

感謝提示 - 我們沒有存儲過程 - 所有事情都通過ADO.NET通過純文本查詢進行。還有一件事:想知道多長時間可以進行更新統計操作 - 我們的數據庫相當小 - 有1GB大小,大約50張表格,記錄數量很少(最大的4個表格大約有130 000行,其餘表格大大少於100 000)。我聽說更新統計信息也可能導致一些性能問題,所以我想我會停止整個應用程序一段時間,然後該操作將再次運行。在本地服務器中,該操作需要8秒。 – user2987281

相關問題