2010-05-18 5 views
1

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

+3

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

+0

Si vous faites une boucle dans une procédure stockée, il y a de fortes chances que vous le fassiez mal. – Joe

Répondre

2

Combien de fois la boucle en itérer? Je suppose que Aqua Data Studio construit des structures de données au fur et à mesure de l'exécution de la requête et pour chaque itération de la boucle, un autre bloc de mémoire est nécessaire pour cataloguer le plan/les statistiques de cette itération.

+0

Le max_id est ~ 32,000,000 – Nathan

+0

Eh bien, si, par exemple, 1000 octets étaient nécessaires pour stocker des détails sur chaque itération (et il pourrait être beaucoup plus que cela!), Aqua Data Studio aurait besoin de 32 Go de mémoire! Si vous n'avez pas besoin d'analyser l'exécution du SP, ne courez pas depuis Aqua Data Studio (ou désactivez ses fonctions de surveillance, si c'est possible). –

Questions connexes