[英]Problem executing stored procedure in my code
我有一個存儲過程,該過程返回一組8個integer
數值。 最初,所有操作似乎都以正確的方式執行,但是在執行某些操作后,當我使用TADOQuery
在C ++代碼中執行它時,執行時間會增加,但在SSMS中卻不會,直到執行時間仍然正確為止。
在第一步中,我嘗試發展我的存儲過程以使其更了解性能。 我贏得了一些執行時間,但問題仍然存在。
我還嘗試檢查代碼,搜索一些荒謬的行,這些行可能會延長執行時間。 但是我將相同的代碼與其他存儲過程一起使用,它們沒有顯示出相同的效果。
因此,我使用SQL事件探查器查看到底發生了什么。 在下面,您可以看到好的執行與壞的執行之間的區別。
執行良好
CPU | Reads | Writes | Duration
93 | 13657 | 0 | 113
執行不力
CPU | Reads | Writes | Duration
22090 | 31960629 | 0 | 25158
如您所見,讀取和cpu訪問的值呈指數增長。
如果我在SSMS查詢編輯器中執行相同的存儲過程,則結果將直接實現良好的執行。
我只希望我的存儲過程始終以差不多相同的持續時間執行,而不管我在哪里執行查詢。
已經看過幾次了-它吸引了我們很多人。 根據您的呼叫檢查設置,以查看諸如ansi nulls on / off,其他設置等情況。類似的更改導致執行計划不同。 有關詳細信息, 在ssms中比在應用程序中查看SQL更快 。
問題出在執行計划中。
編譯存儲過程時,將基於實際數據確定新計划。 幾次執行后,該計划就過時了,因為數據經常更改。
因此,要解決此問題,我對存儲過程使用了WITH RECOMPILE選項。 我認為這不是最好的解決方案,但是它解決了問題,現在我沒有查詢超時了。
這樣,我嘗試了其他一些解決方案以在最佳時機應用重新編譯,但是唯一有效的解決方案是使用此選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.