J'essaie d'exécuter une procédure stockée avec une boucle while en utilisant Aqua Data Studio 6.5 et dès que le SP démarre Aqua Data commence à consommer une quantité croissante de mémoire de mon processeur, ce qui rend absolument pas de sens pour moi car tout devrait être éteint sur le serveur Sybase avec lequel je travaille. J'ai commenté et testé chaque élément du SP et réduit le problème à la boucle while. Quelqu'un peut-il m'expliquer ce qui se passe?La procédure stockée SQL Sybase consomme trop de mémoire
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
retour
Bien sûr, si vous pouvez éviter la boucle tout à fait, vous feriez mieux. Sans savoir ce que fait votre boucle, il est difficile de dire si cela peut être évité. mais la plupart d'entre eux peuvent être remplacés par une logique basée sur les ensembles que les bases de données préfèrent et qui sont généralement beaucoup plus rapides que la mise en boucle. – HLGEM
Si vous faites une boucle dans une procédure stockée, il y a de fortes chances que vous le fassiez mal. – Joe