Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > очистка и копирование таблиц


Автор: cube 24.4.2015, 12:04
Требуется почистить табличку outtable и закидать туда много строк из intable 
Первый вариант процедуры:
Код

begin
    delete yu_didenko.outtable; commit;
    insert into yu_didenko.outtable select * from yu_didenko.intable; commit;
end;


"Улучшенный" второй вариант:
Код

begin
         execute immediate 'truncate table yu_didenko.outtable';
         insert /* +append parallel(yu_didenko.outtable,2)*/ into yu_didenko.outtable 
                select * from yu_didenko.intable;
      commit;
end;


При запуске нет никакой ощутимой разницы во времени выполнения(второй вариант всегда на 3-4 секунды быстрее - если первый работает 2.40, то второй отрабатывает 2.37). Почему?

Автор: Akina 24.4.2015, 17:07
А сколько времени занимают отдельные запросы в процедуре?
А если таблицу вместо очистки дропнуть и создать заново?

Автор: LSD 24.4.2015, 17:32
Цитата(Akina @  24.4.2015,  18:07 Найти цитируемый пост)
А если таблицу вместо очистки дропнуть и создать заново?

truncate нечто подобное и делает. Он даже лучше, потому что не трогает словари.


Цитата(cube @  24.4.2015,  13:04 Найти цитируемый пост)
Почему?

Ты хочешь, чтобы мы за тебя http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_profiler.htm#CHDBHDFE процедуру?

Автор: Zloxa 25.4.2015, 10:51
Цитата(cube @  24.4.2015,  13:04 Найти цитируемый пост)
 Почему? 

1) +append пишет данные напрямую в блоки поверх вотермарка. Как следствие это требует монопольного достпуа к таблице. Как следствие весь параллелелизм по нему деградируется в сериал.
2) На таблице outtable есть триггеры? Триггеры отключают direct path, и, если они есть, скорее всего и являются тут причиной просадки по производительности. Я правильно понимаю, это продолжение http://forum.vingrad.ru/forum/topic-383050/kw-oracle-inserting-batch-preparedstatement.htmlтемы? Я правильно понимаю, что вы из жавы вставились в intable за приемлемое время?
3) С чего вы взяли что у вас должен быть  профит. Я так понимаю вы всего лям по пиццот байт вставляете. Аппенд дает жирный профит на дохулиардах данных. Лям это семачки. На ляме, мне кажется, профит от директ патча должен быть соизмерим с погрешностью измерения. Ну, если железо, конечно, не тухлое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)