Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как ускорить MERGE / 25 сообщений из 38, страница 1 из 2
15.09.2016, 16:52
    #39309796
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
дано:
oracle 11.2
временная таблица, в которую сваливается результат многошагового расчета (10 млн строк на дату)
целевая постоянная таблица, в которую нужно сMERGEить то, что получилось во временной, а именно:
1) апдейт измененного
2) инсерт нового
3) ДЕЛЕТ существующего в постоянной, но отстутствующего во временной

текущий код - MERGE над результатом full outer join этих таблиц - работает от 1 до 6 часов в зависимости от того, как лягут звезды (везде FTS)

вопрос - можно ли его ускорить и КАК?
например, заменой MERGE на 3 вышеперечисленных отдельных действия?
сомнения:
а) merge не работает как append, т.о. insert+append должен быть быстрее
б) но в 11.2 нельзя сделать update соединения , т.к. хинт bypass_ujvc не работает - все равно нужен merge? или есть хитрый массовый update?

индексов на таблицах нет, на таких объемах они - зло
...
Рейтинг: 0 / 0
15.09.2016, 16:59
    #39309805
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12,

Если можно заблокировать таблицу целиком (а при массовом update всего и вся это нормально), То можно сделать в три прохода не заморачиваясь. :)
...
Рейтинг: 0 / 0
15.09.2016, 17:00
    #39309806
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Сергей Арсеньев,

А если EE с партиционированием, то и того проще. Меняешь партицию и все. :)
...
Рейтинг: 0 / 0
15.09.2016, 17:01
    #39309807
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Сергей Арсеньев,

В смысле в два прохода.
...
Рейтинг: 0 / 0
15.09.2016, 17:05
    #39309811
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus121) апдейт измененного
2) инсерт нового
3) ДЕЛЕТ существующего в постоянной, но отстутствующего во временной
а может просто инсерт в пустую таблицу ?
...
Рейтинг: 0 / 0
15.09.2016, 17:09
    #39309813
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
123ййа может просто инсерт в пустую таблицу ?
А чтобы она стала пустой перед этим delete :)
...
Рейтинг: 0 / 0
15.09.2016, 17:13
    #39309815
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Песец в том, что этот МЕРЖЕ сейчас (на пилоте) и работает как инсерт, т.к. в целевой таблице пусто, однако работает от 1 до 6 часов

как раз пробуем заменить его на "просто инсерт+аппенд" ;)
идея со swap partition тоже пришла, но уперлась в необходимость переобъявить временную постоянной, тк для временной партицирование запрещено. надо пробовать - возможно, это самый быстрый вариант для ПОЛНОГО пересчета

но есть еще и ИНКРЕМЕНТАЛЬНЫЙ (внести изменения по ряду строк - несоклько млн)
неужели здесь МЕРЖЕ тоже проиграет извратоконструкции "слить во временную новое, потом добавить из постоянной неизменное старое, потом поменять партиции"?
если да - на кой ляд был придуман МЕРЖЕ вообще?
...
Рейтинг: 0 / 0
15.09.2016, 21:11
    #39309902
nata44845
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
У меня были проблемы с мерже на временных таблицах из за невозможности их оценить, поотключала мерже на базе вообще.
...
Рейтинг: 0 / 0
15.09.2016, 22:31
    #39309924
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12если да - на кой ляд был придуман МЕРЖЕ вообще?Как минимум для апдейта, чтоб избежать коррелированного подзапроса для каждой строки когда обновляемый рекордсет не является key preserved.
Кроме того, для возможности сделать update + insert + delete в одной транзакции.
Да, есть системы к которых выполняются конкурентные merge с хитрой логикой и все работает транзакционно.

Ты вместо того, чтоб здесь изливать свои эмоции лучше выложи в тег SRC результат для твоего SQL ID
Код: plaintext
select dbms_sqltune.report_sql_monitor('<sql_id>') from dual

Если подавляющее число строк вставляется, то, конечно, имеет смысл рассмотреть insert + append + parallel.

nata44845У меня были проблемы с мерже на временных таблицах из за невозможности их оценить, поотключала мерже на базе вообще.Лучше б ты мозги включила, если есть что включать.
...
Рейтинг: 0 / 0
16.09.2016, 04:38
    #39309961
как ускорить MERGE
nata44845У меня были проблемы с мерже на временных таблицах из за невозможности их оценить, поотключала мерже на базе вообще.Девушка, видимо, перепутала способ соединения источников данных( https://docs.oracle.com/database/121/TGSQL/tgsql_join.htm#TGSQL94690]Sort Merge Join ) и оператор DML ( https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm] Merge statement ). И если первой (способ соединения источников данных) можно отключить на уровне параметров инстанса, то второе - только переписыванием кода.
...
Рейтинг: 0 / 0
16.09.2016, 09:56
    #39310054
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
dbms_photoshopКроме того, для возможности сделать update + insert + delete в одной транзакции.
Рамках одной операции же.
В транзакцию несколько операций загнать не вопрос.
А c режимом SERIALAZIBLE заморачиваться лень.
...
Рейтинг: 0 / 0
16.09.2016, 10:29
    #39310075
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Сергей Арсеньев,

Да, думаю про стейтмент, пишу про транзакцию.
...
Рейтинг: 0 / 0
19.09.2016, 13:51
    #39311269
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Если редакция EE, то insert select + (вместо commit) exchange partition.
- если целевая табличка - секционированная, то повторять для каждой секции, ins в не-секционированню
- если целевая табличка - не секционированная, то ins в табличку с единственной секцией (partition by range, key less than maxvalue).
...
Рейтинг: 0 / 0
19.09.2016, 13:53
    #39311271
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
А вообще, согласно моим наблюдениям, merge statement на заметном объеме - суть зло.
...
Рейтинг: 0 / 0
19.09.2016, 15:00
    #39311300
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Сергей Арсеньев123ййа может просто инсерт в пустую таблицу ?
А чтобы она стала пустой перед этим delete :)
а чтобы вообще без таблицы то то create
...
Рейтинг: 0 / 0
21.09.2016, 17:45
    #39312915
Gvenvivar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12, а можешь код скинуть посмотреть? Просто интересно. У меня похожая задача сейчас. Только кол-во данных в разы меньше
...
Рейтинг: 0 / 0
21.09.2016, 19:42
    #39312962
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Gvenvivar99,

а нет смысла: заменили на truncat + insert(append) - работает в 2 раза быстрее чем МЕРЖЕ

также попробовали заменить временную (global temp) таблицу на постоянную (с прицелом на swap partition) - но результат пока отрицательный - время работы по заливке данных во временную (полчаса) плюс последующий insert(append) в постоянную (еще полчаса) примерно равно работе сразу с постоянной (час)

интересно узнать, какие у вас объемы и время работы
...
Рейтинг: 0 / 0
22.09.2016, 10:09
    #39313164
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12также попробовали заменить временную (global temp) таблицу на постоянную (с прицелом на swap partition) - но результат пока отрицательный -
Странно - а в новую таблицу Вы без append что-ли заливаете?
Ибо перелив из временной в очищенную таблицу, не должен быть быстрее прямой заливки в очищенную (новую).
...
Рейтинг: 0 / 0
22.09.2016, 15:08
    #39313508
Gvenvivar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12, у меня пока всего 3542 записи, будет больше, но не превысит 1000. Done in 0,203 seconds
...
Рейтинг: 0 / 0
22.09.2016, 15:59
    #39313570
Gvenvivar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Gvenvivar99Alexus12, у меня пока всего 3542 записи, будет больше, но не превысит 1000. Done in 0,203 seconds
*10000
...
Рейтинг: 0 / 0
22.09.2016, 16:13
    #39313583
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12интересно узнать, какие у вас объемы и время работы
250тыс записей "мерджится" из временной в постоянные таблицы общим объемом 250млн записей за 2.5часа
1.5млн записей из tmp в аналогичные таблицы общим объемом 50млн записей "мерджится" - 1.5часа
...
Рейтинг: 0 / 0
27.09.2016, 11:12
    #39316102
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Avotge,
а инсертится сколько?
...
Рейтинг: 0 / 0
27.09.2016, 16:18
    #39316341
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Alexus12дано:
oracle 11.2
временная таблица, в которую сваливается результат многошагового расчета (10 млн строк на дату)
целевая постоянная таблица, в которую нужно сMERGEить то, что получилось во временной, а именно:
1) апдейт измененного
2) инсерт нового
3) ДЕЛЕТ существующего в постоянной, но отстутствующего во временной


Может я еще не проснулся, но вышесказанное есть нe что иное как:

1. ТRUNCATE постоянная таблица
2. INSERT /*+ APPEND */ постоянная таблица SELECT * FROM временная таблица

Разве-что апдейт измененного касаeтся не всех полей постоянной таблицы.

SY.
...
Рейтинг: 0 / 0
27.09.2016, 16:30
    #39316346
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
SYМожет я еще не проснулся, но вышесказанное есть нe что иное как:
К этому обсуждение и пришло. (Хотя в общем случае нет ибо truncate внетранзакционен, а значит будет момент времени, когда старое порушили, а нового так и не завезли. :))
...
Рейтинг: 0 / 0
27.09.2016, 16:37
    #39316356
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как ускорить MERGE
Сергей Арсеньев,

именно так, но в случае когда важнее быстрее, чем транзакционно, выиграет именно truncate + insert(append)

было бы интересно понять, почему insert(append) во временную таблицу около двух раз быстрее, чем в постоянную.
конечно, постоянная секционирована (нужно сортировать) и журналируется, но только ли это дает замедление в 2 раза?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как ускорить MERGE / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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