如何解决sql server 存储过程在查询分析器快,但程序调用存储过程执行慢的问题?
轉載:http://blog.csdn.net/pgbiao/article/details/22388945
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
這兩天遇到一個問題令人比較郁悶,一個大概120行左右的存儲過程在SQL Server2012的查詢分析器里面執行,
速度非常理想,1秒不到,即可篩選抓取到大概500條數據記錄。
但在C#程序代碼里調用,就提示連接超時。把CommandTimeout設置為300,就要3分鐘左右時間才能顯示出來,
檢查了幾遍代碼也沒有發現錯誤。問題依舊。
原因分析:
1、由于在查詢分析器里執行速度很快,并且數據量也不多。
2、只在程序里調用才有緩慢的情況。
3、設置CommandTimeout參數,就可以顯示結果出來,但要很久。
綜上分析,初步斷定問題出在C#代碼上。但檢查后沒有收獲。
在百度上查詢這方面的資料。
在CSDN論壇上終于找到類似的資料貼子。其中有一網友在回復中說“有可能是執行計劃過期吧”,
真是一言驚醒夢中的我。
立即在查詢分析器上執行:
exec sp_recompile @objname='存儲過程名稱'
再次測試程序,這次終于成功了。速度很滿意。
原因分析:
由于存儲過程是預編譯的, 在第一次執行的時候, 會生成執行計劃, 以后執行的時候, 會使用這個執行計劃(除非存儲過程侯或者顯示指定重新編譯), 而不是每次執行時都去生成執行計劃。
當存儲過程涉及的對象結構調整, 或者相關的數據產生了很大變化, 這可能導致原來的計劃不適合當前的現狀(執行計劃過期), 這種情況下應該重新編譯存儲過程。
如果修改一次不行,可以再修改一次,再等會測試
總結
以上是生活随笔為你收集整理的如何解决sql server 存储过程在查询分析器快,但程序调用存储过程执行慢的问题?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 董源烟岚重溪图——澄心堂纸本考证
- 下一篇: 360手柄摇杆漂移修复_「超逸酷玩」电脑