Oracle таблица базы данных удаляет лучшие практики - PullRequest
0 голосов
/ 16 апреля 2020

Среда: Oracle 12 C

Получил таблицу с примерно 10 столбцами, в которых есть несколько столбцов clob и date. Это очень занятая таблица для процесса ETL, как описано ниже -

Плоские файлы сначала загружаются в таблицу, затем обновляются и обрабатываются. Вставка и обновления происходят партиями. Вставляются и обновляются миллионы записей.

Существует также процесс удаления для удаления старых данных на основе поля даты из таблицы. Процесс удаления выполняется как процедура pl / sql и удаляет из таблицы в al oop выборку первых n записей только на основе поля даты.

Я не хочу, чтобы процесс удаления мешал обычной вставке / обновлению. Как лучше всего кодировать удаление так, чтобы оно оказало минимальное влияние на обычный процесс вставки / обновления?

Я также могу разделить таблицу и удалить параллельно, поскольку каждый раздел использует свой собственный сегмент отката, но ищу для более простого способа настройки процесса удаления. Любые предложения по использованию специального сегмента отката или другие советы по настройке?

1 Ответ

3 голосов
/ 16 апреля 2020

Первое, на что вам нужно обратить внимание, это разделить различные процессы ETL, чтобы вам не нужно было выполнять их все вместе или в определенной последовательности. Тем самым, удаляя зависимости INSERTS / UPDATES и DELETES. Несмотря на то, что вы можете управлять вставкой / обновлением в одном блоке MERGE в вашем ETL, вы можете выполнить удаление позже, просто пометив строки для последующего удаления, таким образом выполнив soft delete . Вы можете сделать это как флаг в столбце таблицы. И используйте то же самое в своем приложении и запросах, чтобы отфильтровать их.

Выполнив удаление позже, ваш критический путь ETL должен минимизироваться. Разделение данных на основе диапазона дат, безусловно, должно помочь вам сохранить данные, а также сделать транзакции эффективными, если они основаны на дате. Кроме того, ищите любые построчно , таким образом медленно-медленные транзакции и производите их навалом. Избегайте переключения контекста между SQL и PL / SQL в максимально возможной степени.

Если вы разбиваете таблицу как диапазон дат, то вы можете посмотреть на DROP/TRUNCATE раздел, который удалит строки, хранящиеся в этом разделе, как оператор DDL. Это не может быть отменено. Он выполняется быстро и использует мало системных ресурсов (Undo и Redo). Подробнее об этом вы можете прочитать в документации .

...