Первое, на что вам нужно обратить внимание, это разделить различные процессы ETL, чтобы вам не нужно было выполнять их все вместе или в определенной последовательности. Тем самым, удаляя зависимости INSERTS
/ UPDATES
и DELETES
. Несмотря на то, что вы можете управлять вставкой / обновлением в одном блоке MERGE в вашем ETL, вы можете выполнить удаление позже, просто пометив строки для последующего удаления, таким образом выполнив soft delete . Вы можете сделать это как флаг в столбце таблицы. И используйте то же самое в своем приложении и запросах, чтобы отфильтровать их.
Выполнив удаление позже, ваш критический путь ETL должен минимизироваться. Разделение данных на основе диапазона дат, безусловно, должно помочь вам сохранить данные, а также сделать транзакции эффективными, если они основаны на дате. Кроме того, ищите любые построчно , таким образом медленно-медленные транзакции и производите их навалом. Избегайте переключения контекста между SQL и PL / SQL в максимально возможной степени.
Если вы разбиваете таблицу как диапазон дат, то вы можете посмотреть на DROP/TRUNCATE
раздел, который удалит строки, хранящиеся в этом разделе, как оператор DDL
. Это не может быть отменено. Он выполняется быстро и использует мало системных ресурсов (Undo и Redo). Подробнее об этом вы можете прочитать в документации .