При больших объемах данных программы имеют свойство работать очень продолжительное время. А пользователи, в свою очередь, хотят, чтобы это время было минимальным.
Если оптимизация запросов и алгоритмов уже не помогает, можно попробовать распараллелить обработку. Задача довольно редкая, актуальных разработок не сохранилось, поэтому не буду здесь приводить примеров кода, а просто вкратце расскажу про два способа. Возможно через какое-то добавлю код.
1-й способ распараллеливание при помощи RFC и дополнения CALL STARTING NEW TASK DESTINATION IN GROUP
2-й способ использование ФМом пакета SPTA. ФМ SPTA_PARA_PROCESS_START_2. При этом важно указать максимальное количество потоков для использования. Чтобы не вешать сервер на время выполнения. Количество потоков можно уточнить у базиса.