2010-05-18 97 views
1

我試圖用Aqua Data Studio 6.5在while循環中運行存儲過程,一旦SP啓動Aqua Data開始消耗越來越多的CPU內存,對我來說絕對沒有意義,因爲我正在使用的Sybase服務器上的所有內容都應該關閉。我已經評論和測試了SP的每一部分,並將問題縮小到while循環。任何人都可以向我解釋發生了什麼事?Sybase SQL存儲過程消耗太多內存

create procedure sp_check_stuff as 
begin 

declare 
    @counter numeric (9), 
    @max_id numeric (9), 
    @exists numeric (1), 
    @rows numeric (1) 

select @max_id = max(id) 
    from my_table  

set @counter = 0 
set @exists = 0 
set @rows = 0 

while @count <= @max_id 
    begin 

    //More logic which doesn't affect memory usage based 
    //on commenting it out and running the SP 

    set @counter = @counter + 1 
    set @exists = 0 
    set @rows = 0 

    end 
end 

回報

+3

當然,如果你可以完全避免循環,你會更好。不知道你的循環是什麼,很難說是否可以避免。但其中大多數可以用數據庫更喜歡的基於集合的邏輯來替代,而且通常比循環快得多。 – HLGEM 2010-05-18 20:42:15

+0

如果您正在循環存儲過程,則可能是您做錯了。 – Joe 2010-05-18 22:37:50

回答

2

多少次while循環迭代?我懷疑Aqua Data Studio在查詢運行時正在構建數據結構,並且對於循環的每次迭代,都需要進一步的內存塊來對該迭代的計劃/統計進行編目。

+0

max_id是〜32,000,000 – Nathan 2010-05-18 20:41:47

+0

那麼,如果需要1000個字節來存儲每個迭代的細節(並且它可能遠不止這些!),Aqua Data Studio將需要32GB的內存!如果您不需要分析SP的運行時間,請勿從Aqua Data Studio運行(或者禁用其監視功能,如果可能的話)。 – 2010-05-18 20:45:29