Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

activerecord preloading causing after-effect performance degredation

Doing a big activerecord query with a lot of peripheral objects.

Adding ".includes" (preloading) speeds it up dramatically by squashing all the N+1's.

The page then renders fast and spits this out into the logs:

Completed 200 OK in 504ms (Views: 104.2ms | ActiveRecord: 86.0ms)

However, it is then * 90 SECONDS * until the page is actually sent down to the browser (or curl; we've tested with both).

During which time the ruby process has the CPU pegged at 100%.

If we remove the ".includes" (preloading) it goes back to normal crappy performance without the minute-and-half chasm of nothingness between page render and browser delivery.

WTF does the preloading cause that after effect!?

One colleague has hypothesized a garbage collection issue; how might I test that theory?

Rails 3.2.12

Ruby 1.9.3 (p286 and p327 tested)

like image 302
Teflon Ted Avatar asked Nov 12 '22 09:11

Teflon Ted


1 Answers

Found the problem; it was the Bullet gem (https://github.com/flyerhzm/bullet).

This gem cleverly finds and reports on N+1 queries and overzealous includes, but in the case of very large result sets it bogs down the application performance considerably.

like image 86
Teflon Ted Avatar answered Dec 23 '22 19:12

Teflon Ted