|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Добрый день. Прошу оказать посильную помощь. 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.
Подскажите, пожалуйста, как ускорить работу мёрджа хотя бы вполовину? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 11:35 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaОценочное время - 220 000миллисекунд? вполне быстро для 17млн, если сервер не всякие экзадаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 11:51 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
кем оценочное?E_SchekaturovaОценочное время - 220 000миллисекунд? вполне быстро для 17млн, если сервер не всякие экзадаты. В Toad, в Long Ops смотрю. В плане cost более 1 млн ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 11:53 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, если бизнес логика позволяет, то в on() можно пофильтровать и большую и меньшую таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 11:53 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
йазабылпадписаццо, аселE_Schekaturova, если бизнес логика позволяет, то в on() можно пофильтровать и большую и меньшую таблицу Хм. Ну да. Забыла то, что там по типам телефонов таблица разбита. Спасибо. Попробую сейчас ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 11:55 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Помогло не сильно. 178 тыс сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:01 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, Что с планом? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:11 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, еще (очевидно ;) - не надо переписывать то, что совпадает ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:11 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, непонятно, сколько записей из 54 млн будут обновляться. по-хорошему следовало бы навесить уникальность на PERSON_tel(PERSONID), тогда у оракла больше возможностей было бы построить оптимальный план ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:25 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
xtenderпо-хорошему следовало бы навесить уникальность на PERSON_tel(PERSONID)хотя что-то я наврал тут - с merge key-preserved проверяется и без этого ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:30 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
xtenderxtenderпо-хорошему следовало бы навесить уникальность на PERSON_tel(PERSONID)хотя что-то я наврал тут - с merge key-preserved проверяется и без этого а я только обрадовалась ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:35 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
По мне так на COLLECT_FE.TELEPHONE должен быть индекс. Код: plsql 1. 2. 3. 4.
Мы бежим full scan по таблице ext_eshchekaturova.PERSON_tel и делаем lookup в таблице COLLECT_FE.TELEPHONE. При совпадении обновляем. Хинт APPEND там ни к чему. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:54 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Alexander RyndinПо мне так на COLLECT_FE.TELEPHONE должен быть индекс. Код: plsql 1. 2. 3. 4.
Мы бежим full scan по таблице ext_eshchekaturova.PERSON_tel и делаем lookup в таблице COLLECT_FE.TELEPHONE. При совпадении обновляем. Хинт APPEND там ни к чему. Спасибо! :) И , соответственно, добавит новый CIFID в TELEPHONE, если там поле пустое? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:56 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Alexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONID ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:57 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, А что покажет Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:58 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaAlexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONIDМожет невалидные? Что со статистикой? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 14:59 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
А чего не просто апдейт? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:02 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Или если в ext_eshchekaturova.person_tel немного записей, то отталкиваться именно от нее, типа загнать в коллекцию и форалом не? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:04 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Анукадевушки, потому что требуется не только обновить, но и добавить значения в пустые поля ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:07 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Анукадевушки, не считаю 17 млн записей малым количеством ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:08 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Alexander Ryndin, должны быть валидными, это всё-таки срез с боевой базы ) статистику сейчас гляну ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:10 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Павел ВоронцовE_Schekaturova, А что покажет Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
? ---- 11 943 313 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:16 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova---- 11 943 313Это первый, а второй? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:19 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaАнукадевушки, потому что требуется не только обновить, но и добавить значения в пустые поля Апдейт обычно добавляет значения в пустые поля. В Вашем запросе NOT MATCHED не определен, так что полный аналог Update-а ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2015, 15:19 |
|
Как ускорить 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 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaAlexander Ryndin, кстати, индексов там целая куча, в т.ч. и PERSONID попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 05:31 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
И в зависимости от длины строки и pctfree - можно получить кучу chained rows после раздувания строки на длину значения в personid ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 05:33 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
dbms_photoshopЯ так нигде и не нашел описания почему при увеличении параллелизма может сильно "раздуваться" потребление темпа. Не очень понимаю тут вопроса "почему". ИМХО, все естественно. Слэйвы обязаны координировать между собой только непересечение конечных результатов работы, а кухня у каждого своя, без учета, что таких слейвов еще N-цать. Хотя, конечно, по уму, ограниченность темпа при построении плана запроса стоило бы учитывать. Ограничивать это как-то можно с помощью Automatic DOP и (против лома нет приема) прямым ограничением parallel на сессию с помощью Resource Manager. ....вообще, конечно, данный топик показывает выигрышный способ получить толковое обсуждение вопроса вместо сра dropping bricks - зарегистрироваться под женским именем. Истинность логина ТС никоим образом не подвергаю сомнению. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 09:52 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Nobody1111, 😓 оскорбилась :-( меня приняли за мужика :D ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 10:05 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaNobody1111, 😓 оскорбилась :-( меня приняли за мужика :D Я ж написал - "Истинность логина ТС никоим образом не подвергаю сомнению". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 10:09 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Nobody1111, На самом деле, я очень довольна полученными ответами, много полезных советов, такому нубному нубу, как я))) я уже несколько предложений попробовали, эффекта немного ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 10:18 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Изя Кацман, Значительно ускорился, не самолет, но уже намного лучше :) Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 11:53 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Если нужен "самолет" выгрузите обе таблицы в другую БД создайте реплику изменения в COLLECT_FE.TELEPHONE, потом уже накатите эту реплику на вашу исходную базу. Можно даже сделать не самолет, а ракету...)) конечно, речь идет о БД in-memory решении... как известном мульте "лучше день потерять, потом за 5 минут долететь" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 12:45 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Поделюсь опытомконечно, речь идет о БД in-memory решении... " Обычно большой апдейт страдает от избыточности lio, а не от скорости доставки данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 13:02 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
персонид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 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 14:04 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax.., добавила и перезапустила свой трэш ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 14:20 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax..персонидпропущено... попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить. не согласен, индексы с PERSONID не надо трогать я б даже сказал наоборот, добавить если нет а вот с COLLECT_FE.TELEPHONE (CIFID ) ЕСЛИ можно я б грохнул/отключил и пересоздал возможно на перестройку индекса и тратится основное время ...... stax +много, индексы с первым столбцом PERSONID не будут тормозить, а остальные сессия при обновлении записей в таблице будет рекурсивно перебирать FULLSCAN-ами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 14:27 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
ORA-38104: Columns referenced in the ON Clause cannot be updated: "TEL"."CIFID" таки ругается, что в фильтре обновляемое значение ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 14:33 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, Перепиши на апдейт. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 14:40 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Павел Воронцов, так? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 14:54 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaORA-38104: Columns referenced in the ON Clause cannot be updated: "TEL"."CIFID" таки ругается, что в фильтре обновляемое значение Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:09 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
dbms_photoshop, хехъ) исправила) благодарю ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:19 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
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.
зы можно через where exists ..., короче надо пробовать и не забывать про индексы с CIFID у приемника и триггера "пустишки" тож могут сильно притормозить ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:28 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax.., совпадений не десятки далеко, а миллионы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:31 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax..персонидпропущено... попробуй еще эти (в которых есть PERSONID) индексы перед апдейтом отклюячить, а потом перестроить. не согласен, индексы с PERSONID не надо трогать я б даже сказал наоборот, добавить если нет а вот с COLLECT_FE.TELEPHONE (CIFID ) ЕСЛИ можно я б грохнул/отключил и пересоздал возможно на перестройку индекса и тратится основное время персонидИ в зависимости от длины строки и pctfree - можно получить кучу chained rows после раздувания строки на длину значения в personid причем тут personid, она ж меняет CIFID да и при смене числа на число врядли получат кучу "chained rows" хотя всякое бывает, из-за дурацкой економии блок пакуют под завязку stax Да, конечно, CIFID (смотрю в книгу - вижу... и далее по тексту). про pctfree я говорил потому что E_Schekaturova Спасибо! :) И , соответственно, добавит новый CIFID в TELEPHONE, если там поле пустое? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:33 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturovastax.., совпадений не десятки далеко, а миллионы. тогда update і свою табличку с ПК PERSONID,CIFID (или ИОТ) должно помочь, оракля если зачения совпадают всеравно меняет со всем своим наворотом мож и в обычную квоту на ТС влезете да и время в разы должно уменьшиться ДБА (если есть) должны помочь, мож есть смысл разбить на порции напр по 100тысч ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:57 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
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 где-то затерялся ну и ладно. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 15:59 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_SchekaturovaИ , соответственно, добавит новый CIFID в TELEPHONE, если там поле пустое? ой, проморгал если там поле пустое, то не добавит, а заменит условие update тогда надо поменять напр на nvl(tel.CIFID,-1e111) <> prs.CIFID ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 16:06 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Я прошу прощения, а что у Вас за база? DSS,OLAP, OLTP? Если честно, то воспользовавшись некоторыми советами, например про PARALLEL DML, Вы рискуете убить OLTP. А APPEND её убъет гарантированно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 16:28 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
ArtNickЯ прошу прощения, а что у Вас за база? DSS,OLAP, OLTP? Если честно, то воспользовавшись некоторыми советами, например про PARALLEL DML, Вы рискуете убить OLTP. А APPEND её убъет гарантированно.Про APPEND особенно оригинально. Тебе лучше в менеджеры идти если любишь порассуждать о различии OLAP vs OLTP и когда первое становится вторым и наоборот. А у меня одна из систем и OLTP и OLAP, так что теперь не использовать параллельность? Или просто боятся "риска смерти"? PS E_Schekaturovaвсе операции будут производиться в схеме collect_fe 1 раз в месяц ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 16:35 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
ArtNick, APPEND убрала по рекомендациям выше. База - OLTP ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 16:35 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
dbms_photoshop, Рекомендации oracle для использования parallel dml читали? Похоже что нет ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 16:53 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Судя по апдейту речь идет о некой денормализации базы? Оно точно необходимо? Может лучше просто в селекте к telephone по personid доставать из person_tel cifid? ) Или по fk или вообще в кластер обе таблицы сложить может? ) Кстати может есть возможность объединить эти две таблички в кластер (сам не юзал правда) или вообще объединить? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 17:07 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
АнукадевушкиСудя по апдейту речь идет о некой денормализации базы? Оно точно необходимо? Может лучше просто в селекте к telephone по personid доставать из person_tel cifid? ) Или по fk или вообще в кластер обе таблицы сложить может? ) Кстати может есть возможность объединить эти две таблички в кластер (сам не юзал правда) или вообще объединить? ) імхо расcинхронизация, и раз в месяц выравнивают без опыта работы, я бы кластер не советовал ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 17:14 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
ArtNickРекомендации oracle для использования parallel dml читали? Похоже что нетВместо того чтоб ставить диагнозы лучше подумай о том, что рассуждения о сферических конях в вакууме имеют практическую пользу чуть менее чем... а вообще никакой пользы они не имеют. Я тебе намекнул что деление olap/oltp может быть весьма условное и последующие рекомендации в отрыве от конкретной специки смысловой нагрузки не несут, в то же время и бредом их назвать нельзя. Работал я с одним "архитектором". Базы данных он знал средненько, за 5 лет работы он ни сделал ни-че-го кроме написания идиотских документов. Ну типа, если вы что-то проектируете, то проставьте бал по каждому из показателей (на картинке ниже), потому проссумируйте с определенными весами и потом бла бла бла. Все это сопровождается обширными графиками и диаграммами. Возникает вопрос что тебе ближе: решать задачу и надувать щеки и обсуждать всякую чупуху а-ля капитан очевидность. Каждый выбирает сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2015, 17:48 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax.., еще ни разу не сталкивалась с конструкцией nvl, где альтернативой является "-1e111", подскажите, как происходит замещение пустого значения при "-1e111". Непонятен принцип действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 10:31 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturovastax.., еще ни разу не сталкивалась с конструкцией nvl, где альтернативой является "-1e111", подскажите, как происходит замещение пустого значения при "-1e111". Непонятен принцип действия. а что не понятно? число, как число. три байта,как три байта Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 10:35 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
orawish, не понимаю, почему при таком значении пустое значение апдейтится на непустое, а при tel.CIFID <> prs.CIFID не апдейтится. Сорри, за нубство :( ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 10:53 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturova, чтобы нул был "равен" нужно это писать дополнительно. чтобы запутать несведущих, есть способы сократить запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 11:52 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
В 3 раза время выполнения мёрджа сократилось, когда перестала перезаписывать одинаковые поля. Спасибо огромное всем за помощь! P.S. Сначала боялась писать сюда, потому что видела, что тут "опускают" неопытных товарищей :D рада, что к девушкам это не относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 12:03 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturovaрада, что к девушкам это не относится.к "девушкам" без справки от гинеколога тут относятся с недоверием. Дискуссия завязалась, так как задача была описана достаточно терпимо уже в первом сообщении и реакция на встречные вопросы адекватная. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 12:10 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 12:12 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax.., а! всё! поняла, как это происходит. Смутило именно -1E111, поэтому и запуталась. Спасибо еще раз! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 12:14 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
E_Schekaturovaтут "опускают" неопытных товарищейТолько непроходимых дур(аков). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 12:21 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax..правильно возможно через LNNVLнеправильно. для этого случая оно проапдейтит null на null. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 12:28 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
stax..то результатом выражение null <> 500 будет UNKNOWN что в оракле равноценно FALSE Не надо так утрировать. UNKNOWN -- это UNKNOWN. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 13:04 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
dbms_photoshop, Очень любопытная история с твоим архитектором. Не совсем ясно зачем она мне. Собственно по теме oltp-olap-dwh-dss : разные подходы. Где-то можно прекрасно сэкономить на truncate-insert/*+ append*/ as select а где-то придется бить 17кк строк на короткие пачки с коммит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 17:51 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
ArtNick, Попробую последнюю попытку. Согласно теории информации существует такое определение (дословно гуглить облом) Информация - есть мера уменьшения энтропии. Твое высказывание очередное "Где-то можно прекрасно сэкономить на truncate-insert/*+ append*/ as select а где-то придется бить 17кк строк на короткие пачки с коммит" не вносит никакой определенности (энтропия не уменьшена), не несет собой смысловой нагрузки и соотвественно вообще информацией не является. Это шум. Просто набор байтов выкинутый в интернет. Я уже сказал, что если есть желание обсудить сферическую систему в вакууме у тебя может и найдутся собеседники, но людям которые ценят свое время это нафиг не надо. Кто-то делает апдейт, кто-то делает truncate + insert append, кто-то одной транзакцией, кто-то несколькими. Искренне ваш, Кэп. PS. Вообще я зря с тобой связался, можешь продолжать учится рожать фразы ни о чем. Главное делать умный вид. Иногда для карьеры помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2015, 22:04 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
Попробуйте так: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 16:10 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
User_DWH, Код: plsql 1. 2. 3. 4. 5. 6. 7.
чувствую что здесь есть магия )) кто нибудь может расшифровать ? - идет полное обновление таблицы по номеру строк? обращение "WHERE ROWID " происходит самым быстрым способом ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 13:52 |
|
Как ускорить MERGE?
|
|||
---|---|---|---|
#18+
essbase.ru - идет полное обновление таблицы по номеру строк? обращение "WHERE ROWID " происходит самым быстрым способом ? Не всей таблицы, а в пределах 10000 строк из неё (v_limit) ROWID - физический адрес строки в таблице. Указание rowid позволяет наиболее быстро перейти к строке. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 19:39 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1880955]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
115ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 531ms |
0 / 0 |