With Rails fragment caching working, why are SELECT statements appearing in my logs inside of the cached fragment?

StackOverflow https://stackoverflow.com/questions/15799671

Question

I've just got memcached setup on my website hosted on Heroku using memcachier and dalli. I have wrapped my homepage in a fragment cache block. In my logs, I can see that the fragment is being cached and read correctly, and I've already found that the results from load testing have greatly improved. But I'm wondering why I still see all these model lookups occuring. My understanding is that I should be able to completely avoid the trip to the database. Do the "Country Load" statements in my logs just represent loading the model from the cache? Or can I avoid them by changing how I'm doing caching?

Thanks for any help!

2013-04-03T22:48:03+00:00 app[web.1]: Read fragment views/home (15.4ms)
2013-04-03T22:48:03+00:00 app[web.1]:   Rendered shared/_home.html (18.8ms)
2013-04-03T22:48:03+00:00 app[web.1]:   Rendered cities/index.html within layouts/application (51.6ms)
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (9.7ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'united states' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (5.0ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'france' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (4.1ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'spain' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (4.3ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'united kingdom' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.4ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'brazil' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.5ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'china' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.0ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'germany' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (2.8ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'argentina' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (12.9ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'japan' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (2.9ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'italy' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.6ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'canada' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.3ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'thailand' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.2ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'colombia' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.6ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'south korea' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (10.7ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'sweden' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.0ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'singapore' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]: Completed 200 OK in 743ms (Views: 359.6ms | ActiveRecord: 382.2ms)
Was it helpful?

Solution

Fragment caching in a view won't catch the layout - do you have a header or footer element that displays countries? You can wrap these in another fragment cache, as well.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top