findAllById сгенерирует оператор SQL с предложением IN (т. Е. Где идентификатор в (val1, val2, ... val10000).
Это вызывает ошибку в Oracle (макс. 1000) и, возможно, другие БД. Если нет, он, вероятно, использует всю доступную память для хранения списка идентификаторов.
Есть несколько вариантов, но я бы рекомендовал сохранить идентификаторы 10k во временной таблице и выполнить SQL объединитесь с вашей основной таблицей. Это будет работать намного лучше, чем любая пакетная обработка или разбиение запроса в нескольких подзапросах.