Oracle Developer👨🏻‍💻
3.24K subscribers
662 photos
86 videos
2 files
540 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
PDML на таблице с триггером. Ответ

Друзья, всем привет! 👋
С вами Костя Андронов.

В понедельник мы задали вопрос: как ускорить вставку данных в таблицу с триггером?

Почему Oracle отключает PDML на таблице с триггером?

Триггер может делать что угодно:
🔹 обновлять другие таблицы,
🔹 вызывать процедуры,
🔹 бросать исключения и т.д.

А при параллельном выполнении это создаёт риски:
🔸 сложно обеспечить транзакционную целостность,
🔸 легко попасть в коллизии,
🔸 поведение становится непредсказуемым.

Поэтому Oracle просто отключает параллелизм на уровне SQL — чтобы не рисковать.

Но это не означает, что мы не можем выполнять вставку параллельно вовсе. Просто управлять этим процессом теперь должен не оптимизатор, а мы сами — со стороны приложения.

🧩 Как вручную распараллелить вставку?

Один из удобных способов — использовать пакет DBMS_PARALLEL_EXECUTE.

Он позволяет легко распараллелить выполнение задачи через фоновые джобы. Что нужно сделать:

1️⃣ Создать задачу:
dbms_parallel_execute.create_task(...)


2️⃣ Разбить данные на чанки соответствующим методом:
🔹по ROWID,
🔹по колонке с типом NUMBER,
🔹или произвольным запросом с двумя колонками start_id и end_id (оба типа NUMBER).

3️⃣ Запустить выполнение:
Oracle сам создаст нужное число джобов, и будет передавать в каждый start_id и end_id через bind-переменные. Количество одновременно работающих джобов настраивается параметром при запуске.

📌 Таким образом, мы контролируем параллелизм вручную, и даже наличие триггера не мешает нам ускорить вставку.

🎥 Как это выглядит вживую — видео к посту.
💬 Обсудить решение или предложить свой способ можно в нашем Чатике
📋 А чтобы глубже погрузиться в оптимизацию — открыта предзапись на 7 поток

С вами был Костя Андронов. Всем отличного дня и приятного просмотра! 🚀

#oracle #оптимизация #sql #Konstantin_Andronov

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀

Анкета предзаписи на 7 поток "Оптимизация Oracle SQL"
👍143🔥2