powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как ускорить MERGE?
96 сообщений из 96, показаны все 4 страниц
Как ускорить MERGE?
    #38941418
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Прошу оказать посильную помощь.

2 таблицы: COLLECT_FE.TELEPHONE 54 млн записей
ext_eshchekaturova.PERSON_tel - 17 млн записей, 2 поля: CIFID и PERSONID (индекс в 1й таблице)

Запускаю обычный MERGE... Оценочное время - 220 000 - это может сказаться на регламентных процессах :(

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
MERGE --+APPEND
INTO COLLECT_FE.TELEPHONE tel
 USING ext_eshchekaturova.PERSON_tel prs
 ON (tel.PERSONID=prs.PERSONID)
WHEN MATCHED
THEN
   UPDATE SET tel.CIFID = prs.CIFID;
commit;



Подскажите, пожалуйста, как ускорить работу мёрджа хотя бы вполовину?

Спасибо.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941435
E_SchekaturovaОценочное время - 220 000миллисекунд?
вполне быстро для 17млн, если сервер не всякие экзадаты.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941439
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кем оценочное?E_SchekaturovaОценочное время - 220 000миллисекунд?
вполне быстро для 17млн, если сервер не всякие экзадаты.

В Toad, в Long Ops смотрю.
В плане cost более 1 млн
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941440
E_Schekaturova,

если бизнес логика позволяет, то в on() можно пофильтровать и большую и меньшую таблицу
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941443
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йазабылпадписаццо, аселE_Schekaturova,

если бизнес логика позволяет, то в on() можно пофильтровать и большую и меньшую таблицу

Хм. Ну да. Забыла то, что там по типам телефонов таблица разбита. Спасибо.
Попробую сейчас )
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941583
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогло не сильно. 178 тыс сек.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941593
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

Что с планом?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941594
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

еще (очевидно ;) - не надо переписывать то, что совпадает
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941607
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
E_Schekaturova,

непонятно, сколько записей из 54 млн будут обновляться. по-хорошему следовало бы навесить уникальность на PERSON_tel(PERSONID), тогда у оракла больше возможностей было бы построить оптимальный план
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941612
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtenderпо-хорошему следовало бы навесить уникальность на PERSON_tel(PERSONID)хотя что-то я наврал тут - с merge key-preserved проверяется и без этого
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941617
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtenderxtenderпо-хорошему следовало бы навесить уникальность на PERSON_tel(PERSONID)хотя что-то я наврал тут - с merge key-preserved проверяется и без этого

а я только обрадовалась
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941621
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Ryndin,
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941634
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мне так на COLLECT_FE.TELEPHONE должен быть индекс.
Код: plsql
1.
2.
3.
4.
MERGE --+APPEND
INTO COLLECT_FE.TELEPHONE tel
 USING ext_eshchekaturova.PERSON_tel prs
 ON (tel.PERSONID=prs.PERSONID)

Мы бежим full scan по таблице ext_eshchekaturova.PERSON_tel и делаем lookup в таблице COLLECT_FE.TELEPHONE. При совпадении обновляем.
Хинт APPEND там ни к чему.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941635
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander RyndinПо мне так на COLLECT_FE.TELEPHONE должен быть индекс.
Код: plsql
1.
2.
3.
4.
MERGE --+APPEND
INTO COLLECT_FE.TELEPHONE tel
 USING ext_eshchekaturova.PERSON_tel prs
 ON (tel.PERSONID=prs.PERSONID)

Мы бежим full scan по таблице ext_eshchekaturova.PERSON_tel и делаем lookup в таблице COLLECT_FE.TELEPHONE. При совпадении обновляем.
Хинт APPEND там ни к чему.

Спасибо! :)
И , соответственно, добавит новый CIFID в TELEPHONE, если там поле пустое?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941639
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONID
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941641
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

А что покажет
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select count(tel.*) from
COLLECT_FE.TELEPHONE tel,
ext_eshchekaturova.PERSON_tel per
where tel.personid=per.personid
/

select count(distinct per.personid) from
ext_eshchekaturova.PERSON_tel per
where exists(select 1 from COLLECT_FE.TELEPHONE tel where tel.personid=per.personid)
/

?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941642
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaAlexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONIDМожет невалидные? Что со статистикой?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941646
А чего не просто апдейт? )
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941650
Или если в ext_eshchekaturova.person_tel немного записей, то отталкиваться именно от нее, типа загнать в коллекцию и форалом не? )
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941654
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анукадевушки, потому что требуется не только обновить, но и добавить значения в пустые поля
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941655
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анукадевушки, не считаю 17 млн записей малым количеством ;-)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941659
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Ryndin,

должны быть валидными, это всё-таки срез с боевой базы )
статистику сейчас гляну
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941665
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел ВоронцовE_Schekaturova,

А что покажет
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select count(tel.*) from
COLLECT_FE.TELEPHONE tel,
ext_eshchekaturova.PERSON_tel per
where tel.personid=per.personid
/

select count(distinct per.personid) from
ext_eshchekaturova.PERSON_tel per
where exists(select 1 from COLLECT_FE.TELEPHONE tel where tel.personid=per.personid)
/

?

----
11 943 313
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941669
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova----
11 943 313Это первый, а второй?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941670
ArtNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaАнукадевушки, потому что требуется не только обновить, но и добавить значения в пустые поля
Апдейт обычно добавляет значения в пустые поля. В Вашем запросе NOT MATCHED не определен, так что полный аналог Update-а
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941676
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Воронцов, это второй. первый ругается на count(tel.*)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941678
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArtNick, у) не знала! спасибо за подсказку :)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941685
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

Ну ок. Апдейт (а Вам правильно сказали, это он) десятков миллионов записей - это жесть. Спросите у админов есть ли у них достаточно места в реду. А лучше оформите этот ужас через dbms_parallel_execute чтобы не было мучительно больно.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941689
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

Джоин практически всех строк с двух таблиц - ни индексы, ни статистика hash join не улучшат. Единственное - можно отказаться от параллелизма. Он полагается на иногда неоправданное количество процессоров (HT) и не учитывает нелинейную деградацию слабых дисков от параллельной нагрузки.

Надо смотреть на что уходит время и действительно ли оно составит несколько суток на не таком уж большом объеме. Влияют триггеры, индекс на обновляемое поле, FGAC и мало ли что еще.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941693
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Воронцов, коллеги предлагают вообще расчет на информатику перекинуть...
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941702
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaПавел Воронцов, коллеги предлагают вообще расчет на информатику перекинуть...

Любой процесс, который поможет прожевать этого мамонта по частям. Либо смотрите почему такой план, следуя советам -2-. Или и то и дрогое (еще лучше).
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941787
st07mnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не стоит делать update нескольких миллионов строк. Спросите у своего DBA почему и уверен, он даст очень эмоциональный ответ. ))

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6407993912330

Резюме:

"If I had to update millions of records I would probably opt to NOT update.

I would more likely do:

CREATE TABLE new_table as select <do the update "here"> from old_table;

index new_table
grant on new table
add constraints on new_table
etc on new_table

drop table old_table
rename new_table to old_table;"
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941804
Либо прийти к тому, что скорость некртитична все-таки, и тогда джобом малыми порциями:
1. На одной табличке делаем индекс-флаг, что запись обработана
2. Берем малыми порциями по роунуму в коллекцию из этой таблички записи вместе с роуИД, на которых флаг из п.1 еще не стоит и апдейтим по форолу нужные записи во второй табличке + выставляем по роуИД флаг на исходной табличке, коммит и так пока все не обработаем )
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941825
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st07mnnНе стоитдавать советов, основываясь на единичном или чужом опыте, да еще в отсутствие достоверной диагностики по проблеме.
Вставка 57млн широких строк против обновления одного поля 17 млн (11 млн) строк. Плюс пересоздание упомянутого множества индексов, часть которых, очевидно, не связаны с изменяемым полем, тоже займет сколько-то времени и потребует temp. А переживания за размер undo значительно проще решаются разбиением на ограниченные куски.

st07mnnСпросите у своего DBA почему и уверен, он даст очень эмоциональный ответ.эмоциональность дба означает, что он плохо выполняет свою работу. Кстати, дроп и выполнение nologging-операции на несвоей таблице, не согласованное с таким дба, тоже может быть чревато.

Анукадевушки1. На одной табличке делаем индекс-флаг, что запись обработана
2. Берем малыми порциями по роунуму в коллекцию из этой таблички записи вместе с роуИД, на которых флаг из п.1 еще не стоит и апдейтим по форолу нужные записи во второй табличке + выставляем по роуИД флаг на исходной табличке, коммит и так пока все не обработаем )Быстрее брать источник экстентами или частями экстентов по диапазону rowid. Флаг не нужен, но стоит сохранять в транзакции адрес обработанного экстента для точки рестарта после сбоя.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941851
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Единственное - можно отказаться от параллелизма.Разумное увеличение degree of parallelism в подобных случаях, как правило, все же увеличивает производительность.
Другое дело, что не смотря на то, что для слейвов выделяется своя workarea (и соответственно больше используется оперативки), зачастую temp tablespace потребляется еще больше для запроса в целом.

Я так нигде и не нашел описания почему при увеличении параллелизма может сильно "раздуваться" потребление темпа.

Если таблицы equi-partitioned, то параллелизм вообще приводит к потрясающим результатам. :)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941911
Самый безопасный способ порезать на куски и медленно и печально...скормить 54 млн строк ораклу (невеликий объем но очень много может "зацепить", если решать в лоб - триггеры, индексы и далее по разговору с администратором). "Медленно" определяется redo, standby,политикой бекапов...администратор бд первый человек, с которым надо провести беседу. Как скармливать вопрос десятый :) оцените вместе с администратором "масштабы катастрофы" :)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941934
Если таки администратор скажет "вперед и с песней" , посмотрите в сторону
SQL> set transaction use rollback segment big_rbs;
и делайте ваш update, не затрагивая остальную работу базы...но я бы рекомендовал "порезать" и медленно и печально :) все сделать
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941941
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поделюсь мыпотоset transaction use rollback segment big_rbsостанется найти базу, где от этого можно получить хоть какой-то эффект.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941946
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поделюсь опытомЕсли таки администратор скажет "вперед и с песней" , посмотрите в сторону
SQL> set transaction use rollback segment big_rbs;
и делайте ваш update, не затрагивая остальную работу базы...но я бы рекомендовал "порезать" и медленно и печально :) все сделать

Вот и занимаюсь препарированием кусков таблицы. Это, на самом деле, не единственный мёрдж такого размера в данной задаче. Самый быстрый за 8 часов отбежал))))
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941964
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaВот и занимаюсь препарированием кусков таблицыА одним куском что-то валится?
Не хватает темпа?
Или не хватает анду?
Другие исключения?
Может желание заюзать больше ресурсов с помощью dbms_parallel_execution?
Или просто убеждение что n маленьких стейтментов лучше одного большого?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941969
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop, раньше валилось, потому что не хватало квоты, добрые дяди админы дали безлимитку, теперь валиться перестали, но работает слишком долго, боюсь закакать темп и положить прод. Потом злая тётя штраф будет требовать :(
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941971
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaПоделюсь опытомЕсли таки администратор скажет "вперед и с песней" , посмотрите в сторону
SQL> set transaction use rollback segment big_rbs;
и делайте ваш update, не затрагивая остальную работу базы...но я бы рекомендовал "порезать" и медленно и печально :) все сделать

Вот и занимаюсь препарированием кусков таблицы. Это, на самом деле, не единственный мёрдж такого размера в данной задаче. Самый быстрый за 8 часов отбежал))))
8 часов наводит на подозрение, что конкурент ушел домой и таки снял висевшую весь день блокировку

ну а кроме шуток
1) попробуйте (хотя бы разок, для сравнения с прочим всем) CTAS
2) таки не перемерживайте значения, которые уже совпадают
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941973
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish,

спасибо :) попробую обязательно.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941990
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

судя по имени схемы
я так понимаю операции разовые

а БЫ начинал с обычного update + insert (если надо)
табличку ext_eshchekaturova.PERSON_tel сделал иот или проиндексировал

и конечно если равенство (tel.CIFID = prs.CIFID), то не менять

зы
можно попробовать forall-ом напр по 10 тысч

......
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941995
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

Ну это просто схема моей учетки, для тестирования скриптов использую :-) на препроде все операции будут производиться в схеме collect_fe 1 раз в месяц.

Все пишут про forall... Поясните, пожалуйста, что это? 😓
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941998
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaВсе пишут про forall...цикл для dml-операций.
for - это как чайной ложкой наполнять бассейн.
forall - ведром.
Позволяет сократить количество переключений контекста sql-plsql (перенос ложки от крана к бассейну), которых в твоем варианте и так нет.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38941999
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

Благодарю за уточнение :-)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942059
Фотография Изя Кацман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaПодскажите, пожалуйста, как ускорить работу мёрджа хотя бы вполовину?Подсказываю

Перед MERGE включи параллельный DML
Код: plsql
1.
ALTER SESSION ENABLE PARALLEL DML;

Посмотри план выполнения EM "SQL Monitor", почувствуй разницу

После MERGE сделай
Код: plsql
1.
COMMIT;


Если параллельный DML тебе больше не нужен, выключи его, чтобы не иметь неожиданных эффектов
Код: plsql
1.
ALTER SESSION DISABLE PARALLEL DML;
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942066
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

Имхо если дизайн позволяет, то переделать на CTAS/mview.

Если нет, то ждите :)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942077
персонид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
E_SchekaturovaAlexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONID

попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942079
персонид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И в зависимости от длины строки и pctfree - можно получить кучу chained rows после раздувания строки на длину значения в personid
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942165
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopЯ так нигде и не нашел описания почему при увеличении параллелизма может сильно "раздуваться" потребление темпа.
Не очень понимаю тут вопроса "почему". ИМХО, все естественно. Слэйвы обязаны координировать между собой только непересечение конечных результатов работы, а кухня у каждого своя, без учета, что таких слейвов еще N-цать. Хотя, конечно, по уму, ограниченность темпа при построении плана запроса стоило бы учитывать.
Ограничивать это как-то можно с помощью Automatic DOP и (против лома нет приема) прямым ограничением parallel на сессию с помощью Resource Manager.

....вообще, конечно, данный топик показывает выигрышный способ получить толковое обсуждение вопроса вместо сра dropping bricks - зарегистрироваться под женским именем. Истинность логина ТС никоим образом не подвергаю сомнению.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942186
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nobody1111,

😓 оскорбилась :-( меня приняли за мужика :D
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942194
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
E_SchekaturovaNobody1111,

😓 оскорбилась :-( меня приняли за мужика :D


Я ж написал - "Истинность логина ТС никоим образом не подвергаю сомнению".
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942213
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nobody1111,

На самом деле, я очень довольна полученными ответами, много полезных советов, такому нубному нубу, как я))) я уже несколько предложений попробовали, эффекта немного
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942343
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изя Кацман,

Значительно ускорился, не самолет, но уже намного лучше :) Спасибо
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942434
Если нужен "самолет" выгрузите обе таблицы в другую БД создайте реплику изменения в COLLECT_FE.TELEPHONE, потом уже накатите эту реплику на вашу исходную базу. Можно даже сделать не самолет, а ракету...)) конечно, речь идет о БД in-memory решении...
как известном мульте "лучше день потерять, потом за 5 минут долететь"
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942462
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поделюсь опытомконечно, речь идет о БД in-memory решении...
"

Обычно большой апдейт страдает от избыточности lio, а не от скорости доставки данных.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942557
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
персонидE_SchekaturovaAlexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONID

попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить.

не согласен, индексы с PERSONID не надо трогать
я б даже сказал наоборот, добавить если нет

а вот с COLLECT_FE.TELEPHONE (CIFID ) ЕСЛИ можно я б грохнул/отключил и пересоздал
возможно на перестройку индекса и тратится основное время

персонидИ в зависимости от длины строки и pctfree - можно получить кучу chained rows после раздувания строки на длину значения в personid
причем тут personid, она ж меняет CIFID

да и при смене числа на число врядли получат кучу "chained rows"
хотя всякое бывает, из-за дурацкой економии блок пакуют под завязку

імхо надо пробовать
вплоть до банального
tel.PERSONID=prs.PERSONID and tel.CIFID <> prs.CIFID and rownum<100000 (подобрать)

но условие tel.CIFID <> prs.CIFID добавил БЫ почти по любому

......
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942573
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

добавила и перезапустила свой трэш )
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942578
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..персонидпропущено...


попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить.

не согласен, индексы с PERSONID не надо трогать
я б даже сказал наоборот, добавить если нет

а вот с COLLECT_FE.TELEPHONE (CIFID ) ЕСЛИ можно я б грохнул/отключил и пересоздал
возможно на перестройку индекса и тратится основное время
......
stax

+много,
индексы с первым столбцом PERSONID не будут тормозить, а остальные сессия при обновлении записей в таблице будет рекурсивно перебирать FULLSCAN-ами.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942587
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ORA-38104: Columns referenced in the ON Clause cannot be updated: "TEL"."CIFID"

таки ругается, что в фильтре обновляемое значение
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942597
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova,

Перепиши на апдейт.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942624
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Воронцов, так?

Код: sql
1.
2.
3.
4.
5.
6.
UPDATE (SELECT TEL.CIFID, PRS.CIFID AS CIFID_new
          FROM    COLLECT_FE.TELEPHONE tel
               JOIN
                  EXT_ESHCHEKATUROVA.PERSON_TEL prs
               ON TEL.PERSONID = PRS.PERSONID AND TEL.CIFID != PRS.CIFID) cif
   SET cif.CIFID = cif.CIFID_new
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942650
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaORA-38104: Columns referenced in the ON Clause cannot be updated: "TEL"."CIFID"

таки ругается, что в фильтре обновляемое значение
Код: plsql
1.
UPDATE SET tel.CIFID = prs.CIFID where tel.CIFID <> prs.CIFID;
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942669
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

хехъ) исправила) благодарю
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942687
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaORA-38104: Columns referenced in the ON Clause cannot be updated: "TEL"."CIFID"

таки ругается, что в фильтре обновляемое значение
сначала надо проанализировать, если у Вас скажем совпадений 100штук то не стоит и проверять

если "много" то надо

да, я забыл указать что пользуюсь "обычным" update + insert если надо

отсюда и возник форал если условие для update неудобное

раз у вас проходит мерже, то скорее всего ext_eshchekaturova.PERSON_tel(personid)
можно сделать ПК (шоб не лезло в таблицу PERSONID,CIFID или ИОТ)

и я б менял примерно так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
SQL> set autotrace on exp
SQL> update (select tel.CIFID tc , prs.CIFID pc
  2  from t1 tel,t2 prs where
  3  tel.PERSONID=prs.PERSONID and tel.CIFID <> prs.CIFID
  4  ) set tc=pc
  5  /

3 rows updated.


Execution Plan
----------------------------------------------------------
Plan hash value: 661863262

-----------------------------------------------------------------------------------------------
| Id  | Operation                     | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT              |               |     5 |   260 |     4   (0)| 00:00:01 |
|   1 |  UPDATE                       | T1            |       |       |            |          |
|   2 |   NESTED LOOPS                |               |       |       |            |          |
|   3 |    NESTED LOOPS               |               |     5 |   260 |     4   (0)| 00:00:01 |
|   4 |     TABLE ACCESS FULL         | T1            |     6 |   156 |     3   (0)| 00:00:01 |
|*  5 |     INDEX UNIQUE SCAN         | SYS_C00973114 |     1 |       |     1   (0)| 00:00:01 |
|*  6 |    TABLE ACCESS BY INDEX ROWID| T2            |     1 |    26 |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   5 - access("TEL"."PERSONID"="PRS"."PERSONID")
   6 - filter("TEL"."CIFID"<>"PRS"."CIFID")



зы
можно через where exists ..., короче надо пробовать
и не забывать про индексы с CIFID у приемника и триггера "пустишки" тож могут сильно притормозить



.....
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942693
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

совпадений не десятки далеко, а миллионы.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942694
персонид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..персонидпропущено...
попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить.

не согласен, индексы с PERSONID не надо трогать
я б даже сказал наоборот, добавить если нет

а вот с COLLECT_FE.TELEPHONE (CIFID ) ЕСЛИ можно я б грохнул/отключил и пересоздал
возможно на перестройку индекса и тратится основное время

персонидИ в зависимости от длины строки и pctfree - можно получить кучу chained rows после раздувания строки на длину значения в personid
причем тут personid, она ж меняет CIFID

да и при смене числа на число врядли получат кучу "chained rows"
хотя всякое бывает, из-за дурацкой економии блок пакуют под завязку

stax

Да, конечно, CIFID (смотрю в книгу - вижу... и далее по тексту).


про pctfree я говорил потому что

E_Schekaturova Спасибо! :)
И , соответственно, добавит новый CIFID в TELEPHONE, если там поле пустое?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942727
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturovastax..,

совпадений не десятки далеко, а миллионы.
тогда update і свою табличку с ПК PERSONID,CIFID (или ИОТ)
должно помочь,
оракля если зачения совпадают всеравно меняет со всем своим наворотом

мож и в обычную квоту на ТС влезете
да и время в разы должно уменьшиться

ДБА (если есть) должны помочь, мож есть смысл разбить на порции напр по 100тысч
.....
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942734
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody1111dbms_photoshopЯ так нигде и не нашел описания почему при увеличении параллелизма может сильно "раздуваться" потребление темпа.
Не очень понимаю тут вопроса "почему". ИМХО, все естественно. Слэйвы обязаны координировать между собой только непересечение конечных результатов работы, а кухня у каждого своя, без учета, что таких слейвов еще N-цать. Хотя, конечно, по уму, ограниченность темпа при построении плана запроса стоило бы учитывать.
Ограничивать это как-то можно с помощью Automatic DOP и (против лома нет приема) прямым ограничением parallel на сессию с помощью Resource Manager.

....вообще, конечно, данный топик показывает выигрышный способ получить толковое обсуждение вопроса вместо сра dropping bricks - зарегистрироваться под женским именем. Истинность логина ТС никоим образом не подвергаю сомнению.Дядя Том в принципе на пальцах все хорошо рассказывает
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:374218170986#2653212400346307852 each parallel execution server will need it's own temp space and the coordinator could need its own and each parallel execution server might need as much (or more since they get less RAM overall to use - each one does) temp as the single thread did.

For a query like that - we would pick the smaller of the two tables and full scan/hash it. Each parallel execution server might have to spill that to temp (whereas in single threaded mode, just one would)

It is very very very easy for parallel query to require considerably more of every resource than a single threaded query.А мой топик на эту тему на форумах oracle.com где-то затерялся ну и ладно. :)
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942744
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_SchekaturovaИ , соответственно, добавит новый CIFID в TELEPHONE, если там поле пустое?

ой, проморгал
если там поле пустое, то не добавит, а заменит

условие update тогда надо поменять
напр на
nvl(tel.CIFID,-1e111) <> prs.CIFID


.....
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942766
ArtNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я прошу прощения, а что у Вас за база? DSS,OLAP, OLTP? Если честно, то воспользовавшись некоторыми советами, например про PARALLEL DML, Вы рискуете убить OLTP. А APPEND её убъет гарантированно.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942780
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtNickЯ прошу прощения, а что у Вас за база? DSS,OLAP, OLTP? Если честно, то воспользовавшись некоторыми советами, например про PARALLEL DML, Вы рискуете убить OLTP. А APPEND её убъет гарантированно.Про APPEND особенно оригинально.

Тебе лучше в менеджеры идти если любишь порассуждать о различии OLAP vs OLTP и когда первое становится вторым и наоборот.
А у меня одна из систем и OLTP и OLAP, так что теперь не использовать параллельность? Или просто боятся "риска смерти"?

PS
E_Schekaturovaвсе операции будут производиться в схеме collect_fe 1 раз в месяц
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942782
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArtNick,

APPEND убрала по рекомендациям выше. База - OLTP
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942805
ArtNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
Рекомендации oracle для использования parallel dml читали? Похоже что нет
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942819
Судя по апдейту речь идет о некой денормализации базы?
Оно точно необходимо? Может лучше просто в селекте к telephone по personid доставать из person_tel cifid? )
Или по fk или вообще в кластер обе таблицы сложить может? )
Кстати может есть возможность объединить эти две таблички в кластер (сам не юзал правда) или вообще объединить? )
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942826
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнукадевушкиСудя по апдейту речь идет о некой денормализации базы?
Оно точно необходимо? Может лучше просто в селекте к telephone по personid доставать из person_tel cifid? )
Или по fk или вообще в кластер обе таблицы сложить может? )
Кстати может есть возможность объединить эти две таблички в кластер (сам не юзал правда) или вообще объединить? )
імхо
расcинхронизация, и раз в месяц выравнивают

без опыта работы, я бы кластер не советовал

.....
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38942862
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtNickРекомендации oracle для использования parallel dml читали? Похоже что нетВместо того чтоб ставить диагнозы лучше подумай о том, что рассуждения о сферических конях в вакууме имеют практическую пользу чуть менее чем...
а вообще никакой пользы они не имеют.

Я тебе намекнул что деление olap/oltp может быть весьма условное и последующие рекомендации в отрыве от конкретной специки смысловой нагрузки не несут, в то же время и бредом их назвать нельзя.

Работал я с одним "архитектором".
Базы данных он знал средненько, за 5 лет работы он ни сделал ни-че-го кроме написания идиотских документов.

Ну типа, если вы что-то проектируете, то проставьте бал по каждому из показателей (на картинке ниже), потому проссумируйте с определенными весами и потом бла бла бла. Все это сопровождается обширными графиками и диаграммами.

Возникает вопрос что тебе ближе: решать задачу и надувать щеки и обсуждать всякую чупуху а-ля капитан очевидность.
Каждый выбирает сам.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943261
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

еще ни разу не сталкивалась с конструкцией nvl, где альтернативой является "-1e111", подскажите, как происходит замещение пустого значения при "-1e111". Непонятен принцип действия.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943264
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturovastax..,

еще ни разу не сталкивалась с конструкцией nvl, где альтернативой является "-1e111", подскажите, как происходит замещение пустого значения при "-1e111". Непонятен принцип действия.
а что не понятно? число, как число. три байта,как три байта
Код: plsql
1.
select dump(-1e111) from dual;
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943289
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish,

не понимаю, почему при таком значении пустое значение апдейтится на непустое, а при tel.CIFID <> prs.CIFID не апдейтится.
Сорри, за нубство :(
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943370
E_Schekaturova,

чтобы нул был "равен" нужно это писать дополнительно.
чтобы запутать несведущих, есть способы сократить запись.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943388
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 3 раза время выполнения мёрджа сократилось, когда перестала перезаписывать одинаковые поля.
Спасибо огромное всем за помощь!

P.S. Сначала боялась писать сюда, потому что видела, что тут "опускают" неопытных товарищей :D рада, что к девушкам это не относится.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943400
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturovaрада, что к девушкам это не относится.к "девушкам" без справки от гинеколога тут относятся с недоверием.
Дискуссия завязалась, так как задача была описана достаточно терпимо уже в первом сообщении и реакция на встречные вопросы адекватная.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943406
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturovaorawish,

не понимаю, почему при таком значении пустое значение апдейтится на непустое, а при tel.CIFID <> prs.CIFID не апдейтится.
Сорри, за нубство :(
значение может быть любое, напр 0
главное условие шоб такого значения не было среди prs.CIFID

если у вас tel.CIFID IS NULL, a prs.CIFID=напр 500 то
то результатом выражение null <> 500 будет UNKNOWN что в оракле равноценно FALSE
а мы ожидаем TRUE, поетому пишут по разному
правильно возможно через LNNVL, но я к етой ф-ции не привык
сравните
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as(
select 1 tel,1 prs from dual union all
select 2 ,1  from dual union all
select 1 ,null  from dual union all
select null ,1  from dual union all
select null ,null  from dual )
select * from t where LNNVL(tel=prs)
SQL> /

       TEL        PRS
---------- ----------
         2          1
         1 null
null                1
null       null
SQL> ed
Wrote file afiedt.buf

  1  with t as(
  2  select 1 tel,1 prs from dual union all
  3  select 2 ,1  from dual union all
  4  select 1 ,null  from dual union all
  5  select null ,1  from dual union all
  6  select null ,null  from dual )
  7* select * from t where tel<>prs
SQL> /

       TEL        PRS
---------- ----------
         2          1




.....
stax
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943416
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

а! всё! поняла, как это происходит. Смутило именно -1E111, поэтому и запуталась. Спасибо еще раз!
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943422
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturovaтут "опускают" неопытных товарищейТолько непроходимых дур(аков).
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943434
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..правильно возможно через LNNVLнеправильно. для этого случая оно проапдейтит null на null.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943484
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..то результатом выражение null <> 500 будет UNKNOWN что в оракле равноценно FALSE
Не надо так утрировать. UNKNOWN -- это UNKNOWN.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943810
ArtNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
Очень любопытная история с твоим архитектором. Не совсем ясно зачем она мне.
Собственно по теме oltp-olap-dwh-dss : разные подходы. Где-то можно прекрасно сэкономить на truncate-insert/*+ append*/ as select а где-то придется бить 17кк строк на короткие пачки с коммит.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38943978
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtNick,

Попробую последнюю попытку.
Согласно теории информации существует такое определение (дословно гуглить облом)
Информация - есть мера уменьшения энтропии.

Твое высказывание очередное "Где-то можно прекрасно сэкономить на truncate-insert/*+ append*/ as select а где-то придется бить 17кк строк на короткие пачки с коммит" не вносит никакой определенности (энтропия не уменьшена), не несет собой смысловой нагрузки и соотвественно вообще информацией не является. Это шум. Просто набор байтов выкинутый в интернет.

Я уже сказал, что если есть желание обсудить сферическую систему в вакууме у тебя может и найдутся собеседники, но людям которые ценят свое время это нафиг не надо.

Кто-то делает апдейт, кто-то делает truncate + insert append, кто-то одной транзакцией, кто-то несколькими.
Искренне ваш, Кэп.

PS. Вообще я зря с тобой связался, можешь продолжать учится рожать фразы ни о чем.
Главное делать умный вид. Иногда для карьеры помогает.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #38948790
User_DWH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
DECLARE
    v_limit       NUMBER := 10000;

    CURSOR c_update IS
        SELECT /*+parallel(8)*/
         tel.rowid AS rid,
         prs.CIFID as CIFID
        FROM   COLLECT_FE.TELEPHONE tel
			JOIN   ext_eshchekaturova.PERSON_tel prs 
			ON tel.PERSONID=prs.PERSONID
        ORDER  BY tel.rowid;
		
    TYPE t_row_id IS TABLE OF ROWID;
    TYPE t_numbers IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;
	
    v_CIFID  t_numbers;
    v_row_id t_row_id;
BEGIN
    OPEN c_update;
    LOOP
        FETCH c_update BULK COLLECT
            INTO v_row_id,
                 v_CIFID LIMIT v_limit;
        FORALL i IN v_row_id.first .. v_row_id.last
            UPDATE COLLECT_FE.TELEPHONE trg
            SET    trg.CIFID     = v_CIFID(i),                   
				WHERE  ROWID = v_row_id(i);
        COMMIT;
    END LOOP;
    CLOSE c_update;
EXCEPTION
    WHEN OTHERS THEN
        IF c_update%ISOPEN
        THEN
            CLOSE c_update;
        END IF;
        raise_application_error(-20001, SQLERRM);
END;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как ускорить MERGE?
    #39991122
Фотография essbase.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User_DWH,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
    FETCH c_update BULK COLLECT
            INTO v_row_id,
                 v_CIFID LIMIT v_limit;
        FORALL i IN v_row_id.first .. v_row_id.last
            UPDATE COLLECT_FE.TELEPHONE trg
            SET    trg.CIFID     = v_CIFID(i),                   
				WHERE  ROWID = v_row_id(i);



чувствую что здесь есть магия )) кто нибудь может расшифровать ?
- идет полное обновление таблицы по номеру строк?
обращение "WHERE ROWID " происходит самым быстрым способом ?
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #39991208
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
essbase.ru

- идет полное обновление таблицы по номеру строк?
обращение "WHERE ROWID " происходит самым быстрым способом ?

Не всей таблицы, а в пределах 10000 строк из неё (v_limit)
ROWID - физический адрес строки в таблице. Указание rowid позволяет наиболее быстро перейти к строке.
...
Рейтинг: 0 / 0
Как ускорить MERGE?
    #39991257
Фотография essbase.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic,

Огонь!)
Обожаю хаки подобного рода, которые позволяют расширить пределы возможностей системы. Уже унес в меморис )


ЕР
...
Рейтинг: 0 / 0
96 сообщений из 96, показаны все 4 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как ускорить MERGE?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]