簡體   English   中英

在我的代碼中執行存儲過程時出現問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM