Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 медленный вызов процедуры  [new]
volk123
Member

Откуда:
Сообщений: 2
Подскажите, плиз, в чем может быть проблема.

Попробовал залить данные двуми способами:
PreparedStatement и CallableStatement(вызов хранимой процедуры).

Первый способ чуть ли не в 10 раз быстрее, но не понятно почему, гуглится что хранимые процедуры должны выполняться быстрее.
Это хранимая процедура -- выполняет просто вставку.
create or replace procedure save_links4(id_connection in int, page_id_from in int, page_type in int, link_name in varchar2)
as link_page_id int;
begin
insert into other_links(connection_id, page_id_from, link_name, type) values (id_connection, page_id_from, link_name, page_type);
end save_links4;
Подготовленный запрос на вставку -- делает тоже самое(но в 10 раз быстрее).

В обоих случаях сетаплю переменные и выполняю addBatch(), а когда накопится 10000 записей
executeBatch().
16 мар 09, 00:33    [6929377]     Ответить | Цитировать Сообщить модератору
 Re: медленный вызов процедуры  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 940
Могу себе представить следующие причины:
1) Prepared выполняются пачками по чем там у вас равен bindarray size, вызовы процедуры - по одному
2) В вызове процедуры на 10 000 раз приходится 10 000 переключений контекста (sql/plsql), в prepared - ни одного.

В общем, то что процедуры выполняются быстрее (быстрее чем что?) - немного непонятное и в любом случае необоснованное утверждение.

Best regards

Maxim
16 мар 09, 08:39    [6929572]     Ответить | Цитировать Сообщить модератору
 Re: медленный вызов процедуры  [new]
volk123
Member

Откуда:
Сообщений: 2
Maxim Demenko,
автор
1) Prepared выполняются пачками по чем там у вас равен bindarray size, вызовы процедуры - по одному

Я его выполняю как и Prepared пачками. Или там нужны какие-то еще доп настройки?(какой-нить setAutoCommit или что-то еще)
В Prepared написана та же самая строка:
insert into other_links(connection_id, page_id_from, link_name, type) values (?, ?, ?, ?);
а дальше работа уже совсем идентичная в подстановке и добвлении к блоку и исполнения блока.
16 мар 09, 10:52    [6930095]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить