Bonjour,
Je fais actuellement des tests de performance sur des procédures stockées qui sont très longues.
Je suis surpris par le temps d'execution d'une procédure d'update d'une table qui prend plus de 30 minutes lors de la première execution, et qui prend moins de 2 minutes si je la relance une deuxième fois.
Ma procédure fonctionne sur le modèle suivant :
------------------------------------
cursor gc_cus is
select *
from TABLE_REF;
...
for gci in gc_cus
loop
update TABLE_UPDATE
set COL_A = gci.COL_A,
COL_B = gci.COL_B,
UPDATE_D = sysdate,
UPDATED_BY = 'sys'
where SYSID = gci.SYSID;
commit;
end loop;
------------------------------------
SYSID est une colonne indexée (clé primaire).
Je suppose que la deuxième exécution de la procédure est beaucoup plus rapide car mes blocks de données ont été mis dans le buffer cache. Est-ce bien cela?
Quelle peut être la solution pour que la procédure soit plus rapide la première fois? Faut-il chercher plutôt au niveau de la structure de la table/indexes ou des paramètres Oracle?
Je travaille en Oracle 8.1.7
Merci d'avance pour votre aide.
Partager