Журнал с материализованным представлением (MV) может использоваться для того, чтобы позволить MV быстро обновлять данные, изменяя только измененные данные. Однако различные условия не позволяют MV использовать журнал и поэтому требуют полного обновления. Oracle реализовал полное атомарное обновление в виде удаления и вставки каждой записи. Это происходит даже в том случае, если в конечном итоге данные не изменяются.
Есть ли способ сделать эту репликацию разумной в отношении генерации повторов ? MERGE, за которым следует DELETE, запрашивает источник дважды. Стоит ли массово собирать данные, чтобы выполнить BULK MERGE и DELETE? Есть ли способ лучше?
Обновить:
Я исследовал использование глобальной временной таблицы в качестве промежуточной области. Хотя они используют меньше половины повторов, они все равно используют много.
источник
insert
ops генерируют гораздо меньше откатов, чемdelete
илиupdate
ops (практически ни одного). Хорошим подходом может быть наличие нескольких gtts, чтобы избежать дорогостоящих операцийinsert
s. Это близко соответствует результатам, которые я вижу, и лучше, но не так хорошо, как хотелось бы.append
подсказок) не являются идеальными условиями для уменьшения повторения - я провел несколько тестов, чтобы показать, что я имею в виду. Опубликовано в качестве ответа, потому что они не вписываются в комментарийОтветы:
Это просто предназначено для демонстрации повторного использования различных
insert
операций, а не для ответа на весь вопрос. Результаты на моем 10g экземпляре не являются на 100% детерминированными, но общая картина оставалась неизменной каждый раз, когда я пробежал.Для кучи таблиц я не знаю, почему
insert /*+ append */
генерируется больше повторов.Testbed:
контрольная работа:
результат:
источник
Хороший вопрос. Я "решил" эту проблему для моей ситуации некоторое время назад, делая MV и любые индексы на них NOLOGGING. Не было никакого смысла в моей ситуации - в любом случае я делал полное обновление представления, зачем мне повторять?
источник