powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как ускорить MERGE
25 сообщений из 38, страница 1 из 2
как ускорить MERGE
    #39309796
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дано:
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
как ускорить MERGE
    #39309805
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12,

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

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

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

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

но есть еще и ИНКРЕМЕНТАЛЬНЫЙ (внести изменения по ряду строк - несоклько млн)
неужели здесь МЕРЖЕ тоже проиграет извратоконструкции "слить во временную новое, потом добавить из постоянной неизменное старое, потом поменять партиции"?
если да - на кой ляд был придуман МЕРЖЕ вообще?
...
Рейтинг: 0 / 0
как ускорить MERGE
    #39309902
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня были проблемы с мерже на временных таблицах из за невозможности их оценить, поотключала мерже на базе вообще.
...
Рейтинг: 0 / 0
как ускорить MERGE
    #39309924
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
как ускорить MERGE
    #39309961
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
как ускорить MERGE
    #39310054
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopКроме того, для возможности сделать update + insert + delete в одной транзакции.
Рамках одной операции же.
В транзакцию несколько операций загнать не вопрос.
А c режимом SERIALAZIBLE заморачиваться лень.
...
Рейтинг: 0 / 0
как ускорить MERGE
    #39310075
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

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

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

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

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


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

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

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

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

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

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


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