Контекст
- SimpleJob(SingleThread) в Spring Batch, который обрабатывает 1 миллион сообщений из темы (внутренний доверенный источник) каждое утро в 7 утра
- и вставляет их (по одному) one) в промежуточную таблицу (A)
- Затем считывает строки из A частями по 1000 строк и вставляет эти строки (одну за другой) в целевую таблицу B
JAVA 17, Spring Batch, MySQL
ПроблемаНа выполнение работы уходит 23 часа. Мне бы хотелось сократить время до менее 2 часов.
Предложения по улучшению
- Удаление промежуточной таблицы : позволит использовать SELECT/INSERT меньше 1 миллиона. Я спросил бывших разработчиков, есть ли причины поддерживать эту таблицу (не используемую где-либо еще).
- ИСПОЛЬЗОВАНИЕ МАССОВОЙ ВСТАВКИ: я читал, что это поможет повысить производительность.
Увеличить размер фрагмента (интервал фиксации): фрагмент из 1000 швов слишком мал, поэтому нужно больше SELECT/INSERT. Размер фрагмента необходим, чтобы избежать ошибок OutOfMemory Java Heap Space. Но я не знаю, как определить правильный размер фрагмента, кроме случайного тестирования значений
- Видите ли вы веские причины для использования промежуточной таблицы в этом случае?
- Вы знаете, как мне определить правильный размер фрагмента?
Существуют ли какие-либо стандарты в отношении значений? - Могу ли я пробовать случайные значения только до тех пор, пока оно не завершится в приемлемое время?
- Поскольку все потоки будут писать в одну и ту же базу данных (возможное узкое место?)< /li>
Заранее большое спасибо за помощь!
Подробнее здесь: https://stackoverflow.com/questions/790 ... from-kafka