2010-05-18 3 views
1

Я пытаюсь запустить хранимую процедуру с циклом while в ней с использованием Aqua Data Studio 6.5, и как только SP начнет запускать Aqua Data, начинает потреблять все большее количество памяти моего процессора, что делает абсолютно никакого смысла для меня, потому что все должно быть выключено на сервере 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

+0

Если вы зацикливаетесь в хранимой процедуре, вероятность того, что вы делаете это неправильно. – Joe

ответ

2

Сколько раз делает итерацию время цикла? Я подозреваю, что Aqua Data Studio наращивает структуры данных по мере запуска запроса и для каждой итерации цикла необходим дополнительный блок памяти, чтобы каталогизировать план/статистику этой итерации.

+0

Max_id ~ 32,000,000 – Nathan

+0

Ну, если, скажем, 1000 байтов были необходимы для хранения сведений об каждой итерации (и это могло бы быть намного больше!), Aqua Data Studio понадобилось бы 32 ГБ памяти! Если вам не нужно анализировать время выполнения SP, не заходите из Aqua Data Studio (или отключите его функции мониторинга, если это возможно). –

Смежные вопросы