Решение задачи №1: Как ускорить INSERT миллионов и миллиардов строк в Oracle 🚀
Коллеги, всем привет! 👋 На связи Денис.
Сегодня обещал рассказать про методики ускорения массовой вставки данных. Выполняю обещание.
Работал с этим в своё время в IT Магнит - там объёмы были такие, что обычный INSERT просто не вывозил. Приходилось думать головой и комбинировать подходы.
Некоторые техники ниже можно и нужно миксовать - например, APPEND + parallel в связке дают очень хороший результат.
Итак, 5 практических техник для Oracle (список не конечный):
1️⃣ Direct-Path Insert + NOLOGGING - хинт /*+ APPEND */ с режимом NOLOGGING пишет блоки напрямую в датафайлы, минуя Buffer Cache. Радикально меньше redo/undo - вставка ускоряется в разы. C nologging есть нюансы с бекапами и PROD.
2️⃣ Параллельный DML - один процесс не вывезет сотни миллионов строк. ALTER SESSION ENABLE PARALLEL DML + хинт /*+ PARALLEL */ задействуют все доступные ядра на чтение и запись.
3️⃣ Отключение индексов и констрейнтов - на каждую строку Oracle перестраивает B-tree деревья. Переводим индексы в UNUSABLE, констрейнты в DISABLE NOVALIDATE, заливаем данные, потом перестраиваем\включаем.
4️⃣ Partition Exchange - вместо вставки строк готовим данные в staging-таблице и делаем EXCHANGE PARTITION. Мгновенная операция на уровне словаря данных - просто переключение указателей за доли секунды.
5️⃣ Один проход вместо двух транзакций - данные из нескольких источников объединяем через INSERT ALL.
Более подробно разберём всё это на вебинаре 3 сентября. Покажу реальные кейсы, хинты, планы запросов и хитрости, с которыми сам работал на больших данных.
Поставьте напоминание в календарь и зовите коллег 🔔
С вами был Денис. Всем быстрых инсертов 🤝
#oracle #sql #plsql #производительность #performance #insert #DWH #базы_данных #оптимизация #вебинар #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
📱 YouTube 📱 ВКонтакте 📱 LinkedIn 📱Threads
RUTUBE
Post #1424
1K

- 🔥 21
- ❤ 5