В настоящее время я отслеживаю утечку производительности в хранимой процедуре.
Выделение временной метки сразу после начального «начала» и одной перед конечным «концом» (я делаю коммит до ) говорит о том, что процедура занимает около. 10 секунд до конца.
Однако мне нужно подождать 2 минуты +, пока он не закончится.
Кто-нибудь может сказать мне, где проходит остальное время? Я использую Oracle SQL dev, но в остальное время он не работает, кажется, процедура удерживает блокировку соответствующей таблицы: (
Заранее большое спасибо за просветление ...
РЕДАКТИРОВАТЬ: еще раз спасибо за ваш вклад :)
вот раздетый код для процедуры, в зависимости от количества обрабатываемых элементов, 1-й раздел в настоящее время занимает около. От 10 до 40 секунд, 2-й раздел несколько миллисекунд. однако процедура занимает от 2 до 8 минут.
Кроме того, таблица, содержащая данные для удаления, кажется, заблокирована несколько дольше, чем нужно, что приводит к отложению вставок.
запуск по расписанию не имеет значения, кстати, такое же поведение.
create or replace
procedure MY_PROCEDURE is
start_procedure number;
start_delete number;
end_procedure number;
begin
start_procedure :=dbms_utility.get_time;
begin
-- stripped: doing some selects/updates here
end;
commit;
start_delete :=dbms_utility.get_time ;
begin
-- stripped: cleanig up some other data here
end;
commit;
end_procedure :=dbms_utility.get_time ;
dbms_output.put_line('procedure took: '||to_char((end_procedure- start_procedure)/1000));
dbms_output.put_line('updates took: '||to_char((start_delete- start_procedure)/1000));
dbms_output.put_line('delete took: '||to_char((end_procedure-start_delete)/1000));
end;