Не совсем ответ, но слишком длинный для комментария.
Несколько слишком много переменных могут повлиять на это, чтобы дать информированный совет, поэтому ниже приведены лишь некоторые общие подсказки.
Является ли эточерез сеть или локально на сервере? Если база данных является удаленным сервером, то вы платите большую сетевую цену. Я бы предложил (если это возможно) запустить извлечение на сервере по протоколу BEQUEATH, чтобы избежать использования сети. Как только файл (ы) завершен, его будет быстрее сжать и передать в место назначения, чем передавать данные непосредственно из базы данных в локальный файл с помощью обработки строк JDBC.
При использовании JDBC не забудьте установить размер выборки курсора, чтобы уменьшитькруговое отключение - setFetchSize
. Значение по умолчанию крошечное (думаю, 10), попробуйте что-то вроде 1000, чтобы увидеть, как это помогает.
Что касается запроса, вы записываете в файл, поэтому даже если Oracle может обработать запрос параллельно, ваш процесс записи в файл, вероятно, не так, что это узкое место.
Мой подход заключается в написании Java-программы для работы с диапазоном значений в качестве параметров командной строки и эксперименте по поискукакой размер диапазона и одновременные экземпляры Java дают оптимальную производительность. Диапазон, вероятно, будет находиться в пределах отдельных разделов, поэтому вы получите выгоду от сокращения разделов (при условии, что значение диапазона - это индексированный столбец, в идеале - ключ раздела).
Грубо говоря, я бы начал с диапазона 5 м и запустил бы параллельный запуск. экземпляры, соответствующие количеству ядер ЦП - 2;это не научно полученное число, которое я обычно использую в качестве первого удара, и посмотрим, что произойдет.