Я использую базу данных Oracle с Apache spark 2.3.0
В моем коде я пишу окончательный результат (после всей обработки) в трех таблицах , используя команду "spark" ниже.
billableChargeKDF.write().mode("append").format("jdbc").option("url", connection).option("dbtable", "CI_BILL_CHG_K").save();
billableChargeDF.write().mode("append").format("jdbc").option("url", connection).option("dbtable", "CI_BILL_CHG").save();
billableChargeSqDF.write().mode("append").format("jdbc").option("url", connection).option("dbtable", "CI_BCHG_SQ").save();
Каждый из трех кадров данных имеет 130 разделов. Каждый фрейм данных записывает 30 миллионов строк.
Я использую 130 ядер, 26 исполнителей (каждый исполнитель имеет 30 ГБ памяти), 2 рабочих машины (каждая имеет 88 виртуальных ядер и 502. ГБ памяти)
После анализа AWR report
я обнаружил, что выше INSERT INTO
запросов занимает больше всего времени выполнения.
Можно ли как-нибудь уменьшить то же самое?
Есть ли способ улучшить производительность?
EDIT
Также высокий уровень конкуренции по водяному знаку составляет 30% времени БД.
Машина
DB имеет 16 ядер и 264 ГБ.
ДАННЫЕ ОТЧЕТА ПО AWR
![AWR image 1](https://i.stack.imgur.com/LApxP.png)
![AWR image 2](https://i.stack.imgur.com/XAZ3X.png)