|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Павел Воронцов, это второй. первый ругается на count(tel.*) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:23 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
ArtNick, у) не знала! спасибо за подсказку :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:24 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, Ну ок. Апдейт (а Вам правильно сказали, это он) десятков миллионов записей - это жесть. Спросите у админов есть ли у них достаточно места в реду. А лучше оформите этот ужас через dbms_parallel_execute чтобы не было мучительно больно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:27 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, Джоин практически всех строк с двух таблиц - ни индексы, ни статистика hash join не улучшат. Единственное - можно отказаться от параллелизма. Он полагается на иногда неоправданное количество процессоров (HT) и не учитывает нелинейную деградацию слабых дисков от параллельной нагрузки. Надо смотреть на что уходит время и действительно ли оно составит несколько суток на не таком уж большом объеме. Влияют триггеры, индекс на обновляемое поле, FGAC и мало ли что еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:28 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Павел Воронцов, коллеги предлагают вообще расчет на информатику перекинуть... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:31 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaПавел Воронцов, коллеги предлагают вообще расчет на информатику перекинуть... Любой процесс, который поможет прожевать этого мамонта по частям. Либо смотрите почему такой план, следуя советам -2-. Или и то и дрогое (еще лучше). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:36 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Не стоит делать 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;" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 16:47 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Либо прийти к тому, что скорость некртитична все-таки, и тогда джобом малыми порциями: 1. На одной табличке делаем индекс-флаг, что запись обработана 2. Берем малыми порциями по роунуму в коллекцию из этой таблички записи вместе с роуИД, на которых флаг из п.1 еще не стоит и апдейтим по форолу нужные записи во второй табличке + выставляем по роуИД флаг на исходной табличке, коммит и так пока все не обработаем ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 17:00 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
st07mnnНе стоитдавать советов, основываясь на единичном или чужом опыте, да еще в отсутствие достоверной диагностики по проблеме. Вставка 57млн широких строк против обновления одного поля 17 млн (11 млн) строк. Плюс пересоздание упомянутого множества индексов, часть которых, очевидно, не связаны с изменяемым полем, тоже займет сколько-то времени и потребует temp. А переживания за размер undo значительно проще решаются разбиением на ограниченные куски. st07mnnСпросите у своего DBA почему и уверен, он даст очень эмоциональный ответ.эмоциональность дба означает, что он плохо выполняет свою работу. Кстати, дроп и выполнение nologging-операции на несвоей таблице, не согласованное с таким дба, тоже может быть чревато. Анукадевушки1. На одной табличке делаем индекс-флаг, что запись обработана 2. Берем малыми порциями по роунуму в коллекцию из этой таблички записи вместе с роуИД, на которых флаг из п.1 еще не стоит и апдейтим по форолу нужные записи во второй табличке + выставляем по роуИД флаг на исходной табличке, коммит и так пока все не обработаем )Быстрее брать источник экстентами или частями экстентов по диапазону rowid. Флаг не нужен, но стоит сохранять в транзакции адрес обработанного экстента для точки рестарта после сбоя. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 17:26 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
-2-Единственное - можно отказаться от параллелизма.Разумное увеличение degree of parallelism в подобных случаях, как правило, все же увеличивает производительность. Другое дело, что не смотря на то, что для слейвов выделяется своя workarea (и соответственно больше используется оперативки), зачастую temp tablespace потребляется еще больше для запроса в целом. Я так нигде и не нашел описания почему при увеличении параллелизма может сильно "раздуваться" потребление темпа. Если таблицы equi-partitioned, то параллелизм вообще приводит к потрясающим результатам. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 17:45 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Самый безопасный способ порезать на куски и медленно и печально...скормить 54 млн строк ораклу (невеликий объем но очень много может "зацепить", если решать в лоб - триггеры, индексы и далее по разговору с администратором). "Медленно" определяется redo, standby,политикой бекапов...администратор бд первый человек, с которым надо провести беседу. Как скармливать вопрос десятый :) оцените вместе с администратором "масштабы катастрофы" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 18:41 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Если таки администратор скажет "вперед и с песней" , посмотрите в сторону SQL> set transaction use rollback segment big_rbs; и делайте ваш update, не затрагивая остальную работу базы...но я бы рекомендовал "порезать" и медленно и печально :) все сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 18:57 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Поделюсь мыпотоset transaction use rollback segment big_rbsостанется найти базу, где от этого можно получить хоть какой-то эффект. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:04 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Поделюсь опытомЕсли таки администратор скажет "вперед и с песней" , посмотрите в сторону SQL> set transaction use rollback segment big_rbs; и делайте ваш update, не затрагивая остальную работу базы...но я бы рекомендовал "порезать" и медленно и печально :) все сделать Вот и занимаюсь препарированием кусков таблицы. Это, на самом деле, не единственный мёрдж такого размера в данной задаче. Самый быстрый за 8 часов отбежал)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:06 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaВот и занимаюсь препарированием кусков таблицыА одним куском что-то валится? Не хватает темпа? Или не хватает анду? Другие исключения? Может желание заюзать больше ресурсов с помощью dbms_parallel_execution? Или просто убеждение что n маленьких стейтментов лучше одного большого? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:23 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
dbms_photoshop, раньше валилось, потому что не хватало квоты, добрые дяди админы дали безлимитку, теперь валиться перестали, но работает слишком долго, боюсь закакать темп и положить прод. Потом злая тётя штраф будет требовать :( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:25 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaПоделюсь опытомЕсли таки администратор скажет "вперед и с песней" , посмотрите в сторону SQL> set transaction use rollback segment big_rbs; и делайте ваш update, не затрагивая остальную работу базы...но я бы рекомендовал "порезать" и медленно и печально :) все сделать Вот и занимаюсь препарированием кусков таблицы. Это, на самом деле, не единственный мёрдж такого размера в данной задаче. Самый быстрый за 8 часов отбежал)))) 8 часов наводит на подозрение, что конкурент ушел домой и таки снял висевшую весь день блокировку ну а кроме шуток 1) попробуйте (хотя бы разок, для сравнения с прочим всем) CTAS 2) таки не перемерживайте значения, которые уже совпадают ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:26 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
orawish, спасибо :) попробую обязательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:28 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, судя по имени схемы я так понимаю операции разовые а БЫ начинал с обычного update + insert (если надо) табличку ext_eshchekaturova.PERSON_tel сделал иот или проиндексировал и конечно если равенство (tel.CIFID = prs.CIFID), то не менять зы можно попробовать forall-ом напр по 10 тысч ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 19:58 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax.., Ну это просто схема моей учетки, для тестирования скриптов использую :-) на препроде все операции будут производиться в схеме collect_fe 1 раз в месяц. Все пишут про forall... Поясните, пожалуйста, что это? 😓 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 20:13 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaВсе пишут про forall...цикл для dml-операций. for - это как чайной ложкой наполнять бассейн. forall - ведром. Позволяет сократить количество переключений контекста sql-plsql (перенос ложки от крана к бассейну), которых в твоем варианте и так нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 20:30 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
-2-, Благодарю за уточнение :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 20:32 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaПодскажите, пожалуйста, как ускорить работу мёрджа хотя бы вполовину?Подсказываю Перед MERGE включи параллельный DML Код: plsql 1.
Посмотри план выполнения EM "SQL Monitor", почувствуй разницу После MERGE сделай Код: plsql 1.
Если параллельный DML тебе больше не нужен, выключи его, чтобы не иметь неожиданных эффектов Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 00:06 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, Имхо если дизайн позволяет, то переделать на CTAS/mview. Если нет, то ждите :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 01:02 |
|
|
start [/forum/topic.php?fid=52&msg=38941946&tid=1880955]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 187ms |
0 / 0 |