У меня есть приложение Rails, которое обрабатывает большое количество записей в базе данных mysql. Как только он начинает работать, его использование памяти быстро растет со скоростью 50 МБ в секунду. С помощью таких инструментов, как oink, я смог сузить основную причину до одного цикла, который проходит через все записи в большой таблице в базе данных.
Я понимаю, что если я использую что-то вроде Person.all.each , все записи будут загружены в память. Однако, если я переключаюсь на find_each , я все равно вижу ту же проблему с памятью. Для дальнейшей изоляции проблемы я создал следующий тестовый контроллер, который делает только циклический просмотр записей. Я полагаю, find_each каждый раз удерживает в памяти только небольшое количество объектов, но использование памяти растет линейно по мере выполнения.
class TestController < ApplicationController
def memory_test
Person.find_each do |person|
end
end
Я подозреваю, что это связано с ActiveRecord, кэширующим результаты запроса. Но я проверил настройки своей среды, и у меня все параметры, связанные с кэшированием, установлены на false в разработке (я использую настройки по умолчанию, созданные rails). Я провел поиск в Интернете, но не смог найти решение.
Я использую рельсы 3.1.0 rc1 и ruby 1.9.2
Спасибо!