I made what I think is a small change yet the change in my app was disastrous - cpu spun, memory went out of control, and mongrel crashed within seconds.
I have a controller which takes a param for submission_id . Submissions have 1 or more reviews, and reviews each have one image. There may be more than one image per submission.
The view (and partial) code does some very intense things, like @submission.reviews.each | review | review.image.imageprofile.releases.empty? , etc. No doubt causes huge joins and queries down the stack.
I built a query for a subset of the reviews belonging to @submission:
@current_reviews = Review.find(:all, :conditions => cond)
The query takes 20 milliseconds. [cond is along the lines of finding max(id) where submission_id=@ submission.id group by image_id ]
Then when I try to loop thru these in view, replacing @submission.reviews.each with @current_reviews.each , it leaks like crazy! Same code works just fine w/ @ submission.reviews.each…
The partial that it’s rendering in that loop is huge - 150 lines of code, with all kinds of join-inducing references. Why would this behavior be any different for a SUBSET ?
Thanks in advance for any insights, things to try, places to look, etc.
Cheers,
Marc