Spring Data Jpa он будет их мапить? У меня почему то довольно долго выходит именно маппинг, сам запрос в БД отрабатывает быстро. Еще почему то он порциями limit тащит все
N+1?
не, fetch join
Долго это скок?
Но он делает лимит, хотя в квери лимита нет?
5 минут, потом shutdown, но 5 минут это очень долго. Сам в бд запрос отрабатывает за 3-7 сек
Лимит это батчинг По хорошему тебе надо стримить, т.е. взять Stream<Entity> Но в целом, jpa не очень подходит под такую задачу
Мб в хип не может все уместить?
Как минимум делай транзакцию readOnly или хинтом в JPA, должно немного помочь.
не, тогда бы с Exception падал
А ты локально запускаешь?
Еще может быть мусорщик пытается почистить неудачно и делает stw
120к объектов в кеше сессии это не хорошо
типовая рекомендация тут - это readOnly + Stream + процессить энтити по-одной и детачить из сессии сразу как вытащил из стрима
А как стрим помогает?
емнип, там в базе открывается курсор, и jpa потихоньку тянет с этого курсора строки по мере необходимости в сумме с детачем, это даёт константное и небольшое потребление памяти
О, а как это работает. Там же под капотом обычный jdbc выходит что мы получаем resultset и затем делаем next каждый раз чтобы получить строку. И выходит что мы каждый раз двигаем курсор и ходим по сети до Бд?
Вроде того, но по факту это происходит батчами, он не по одной строке читает конечно. Для базы это не очень оптимально на самом деле, но на стороне джавы это лучше, так как можно свести кол-во объектов в гиберском кэше к минимуму.
А если реактивный драйвер юзать?
Подвезли реактивный драйвер для гибернейта? Емнип, реактивные jdbc, которые есть, медленнее в плане throughput, чем синхронные.
12000 объектов? Шутишь?
Обсуждают сегодня