pl / sql Хранимая процедура ... куда уходит время выполнения? - PullRequest
2 голосов
/ 26 июня 2009

В настоящее время я отслеживаю утечку производительности в хранимой процедуре. Выделение временной метки сразу после начального «начала» и одной перед конечным «концом» (я делаю коммит до ) говорит о том, что процедура занимает около. 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;

Ответы [ 11 ]

0 голосов
/ 26 июня 2009

Возможно, ваше время связано с большим количеством переключений контекста между java и базой данных, так как разработчик SQL обновляет ваш экран. чтобы проверить это, запустите тест снова в SQLPlus. Чтобы исправить это, перейдите в инструменты> настройки> база данных> дополнительные параметры и увеличьте размер выборки массива SQL до значения где-то между 150 и 500 и (если у вас есть подходящие драйверы) установите флажок Использовать драйвер OCI / Толстый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...