У меня есть программа Java, которая используется для вставки большого количества (750 000) записей в базу данных Oracle. Я использую библиотеку OJDBC6 с клиентом OCI. Таблица для записи содержит 330 столбцов, 8 из которых присутствуют в одном или нескольких индексах.
Попробовав два подхода, я все еще борюсь с некоторыми проблемами производительности.
- Однократное создание подготовленного оператора, заполнение параметров для каждой записи и последующее выполнение оператора занимает 1 час 29 минут.
- Однократное создание готовой выписки, заполнение параметров для каждой записи, добавление их в батч и выполнение батча каждые 500/1000/5000 (перепробовал несколько вариантов) обработанных записей занимает 0ч27.
Однако, когда одни и те же данные сопоставляются с теми же таблицами с помощью инструмента ETL, такого как Informatica PowerCenter, это занимает всего пару минут. Я понимаю, что достижение этого тайминга может быть желаемым за действительное, но я сомневаюсь, что производительность не может быть достигнута.
Кто-нибудь имеет представление о разумных сроках для этого действия и как их можно достичь? Любая помощь приветствуется, большое спасибо заранее!
(Связанный с этим вопрос: мне также придется обновлять много записей. Какой подход будет наиболее эффективным: либо отслеживать измененные столбцы и создавать зависимый от записи подготовленный оператор, содержащий только эти столбцы, либо всегда обновлять все столбцы, тем самым повторно используя один и тот же подготовленный оператор?)