powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как ускорить MERGE?
25 сообщений из 96, страница 2 из 4
Как ускорить 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
25 сообщений из 96, страница 2 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как ускорить MERGE?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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