日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决sql server 存储过程在查询分析器快,但程序调用存储过程执行慢的问题?

發布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决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='存儲過程名稱'

exec sp_recompile @objname='存儲過程名稱'

再次測試程序,這次終于成功了。速度很滿意。

原因分析:
由于存儲過程是預編譯的, 在第一次執行的時候, 會生成執行計劃, 以后執行的時候, 會使用這個執行計劃(除非存儲過程侯或者顯示指定重新編譯), 而不是每次執行時都去生成執行計劃。
當存儲過程涉及的對象結構調整, 或者相關的數據產生了很大變化, 這可能導致原來的計劃不適合當前的現狀(執行計劃過期), 這種情況下應該重新編譯存儲過程。

如果修改一次不行,可以再修改一次,再等會測試

總結

以上是生活随笔為你收集整理的如何解决sql server 存储过程在查询分析器快,但程序调用存储过程执行慢的问题?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。