У меня есть код PL / SQL, который, как мне кажется, может иметь утечку памяти. Каждый раз, когда я запускаю его, кажется, что он работает медленнее и медленнее, чем раньше, хотя сейчас я уменьшаю размер ввода. Код, который я подозреваю, это заполнение массива из курсора с помощью массового сбора, что-то вроде этого
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;
Я не уверен, как проверить, что вызывает это замедление. Я знаю, что в Oracle есть несколько таблиц, которые отслеживают такое использование памяти, но я не уверен, что можно посмотреть на эти таблицы и найти способ вернуться к чему-то полезному в том, что делает мой код.
Кроме того, я попытался выйти из сеанса и снова войти в систему через 10-15 минут, все еще очень медленно.
Версия Oracle 10.2
Так что оказывается была другая активность базы данных. Администратор БД решил выполнить несколько больших заданий на вставку и обновление примерно в то же время, когда я начал изменять и тестировать код. Я подозревал, что мой код был основной причиной, потому что мне не сказали о других запущенных работах (и я услышал об этой другой работе только после того, как она полностью заморозила все и все другие разработчики были раздражены). Вероятно, поэтому мой код становился все медленнее и медленнее.
Есть ли способ выяснить это программно, например, запросить сеанс вставки / обновления большого количества данных, на тот случай, если администратор базы данных забудет сообщить мне в следующий раз, когда он это сделает?