У меня активная работа Rails, запущенная на Heroku dyno через Sidekiq.
Когда работа выполняется, объем памяти увеличивается с 150 МБ до 550 МБ. Я обнаружил, что причина была в n + 1 запросах к БД, и исправил это, выполнив мои вычисления с данными в запросе к БД, а не в коде.
Впоследствии я хотел немного реорганизовать, так как я как правило, хотелось бы, чтобы SQL был несколько простым, и иметь код c в коде. По этой причине я переключил мои «соединения» с «включениями», что позволяет мне использовать ассоциации объектов. Однако оказалось, что этот рефакторинг снова вызвал проблему с памятью. Таким образом, мой вывод заключается в том, что именно использование ассоциаций вызывает рост памяти, поскольку количество SQL запросов одинаково после того, как я исправил проблему N + 1. Обратите внимание, что работа обрабатывает много объектов, около 250.000. Кажется разумным c .f. функциональность удаления и уничтожения, при которой удаление выполняется лучше, поскольку сами объекты не создаются, как и в случае с уничтожением.
Мой вывод точен или я что-то упустил?
Спасибо, Луиза