J'ai un code PL/SQL qui pourrait présenter une fuite de mémoire. Chaque fois que je l'exécute, il semble s'exécuter de plus en plus lentement par rapport à la fois précédente, même si je diminue la taille de l'entrée. Le code dont je me méfie consiste à remplir un tableau à partir d'un curseur en utilisant bulk-collect, quelque chose comme ceci
open c_myCursor(in_key);
fetch c_myCursor bulk collect into io_Array; /*io_array is a parameter, declared as in out nocopy */
close c_myCursor;
Je ne sais pas comment vérifier ce qui cause ce ralentissement. Je sais qu'il existe des tables dans Oracle qui suivent ce type d'utilisation de la mémoire, mais je ne suis pas sûr qu'il soit possible de consulter ces tables et de trouver quelque chose d'utile sur ce que fait mon code.
J'ai également essayé de me déconnecter de la session et de me reconnecter après environ 10-15 minutes, mais cela reste très lent.
La version d'Oracle est la 10.2
Il s'avère donc qu'il y a était d'autres activités de la base de données. L'administrateur de la base de données a décidé d'exécuter de gros travaux d'insertion et de mise à jour à peu près au moment où j'ai commencé à modifier et à tester le code. J'ai soupçonné mon code d'être la cause principale parce que je n'avais pas été informé de l'exécution des autres tâches (et je n'ai entendu parler de cette autre tâche qu'après qu'elle ait complètement gelé la base et que tous les autres développeurs se soient énervés). C'est probablement la raison pour laquelle mon code devenait de plus en plus lent.
Existe-t-il un moyen de le découvrir de manière programmatique, par exemple en interrogeant une session qui insère/modifie de nombreuses données, au cas où le DBA oublierait de me le dire la prochaine fois qu'il le fera ?