繁体   English   中英

Ruby on Rails:为什么第一个活动记录查询需要更长时间?

[英]Ruby on Rails: Why first active record query takes longer?

如果我在一段时间间隔后执行活动记录查询,则需要更长时间。

Say Item.all在第一次查询时需要.11秒,之后需要.003。 这种行为可能是什么原因?

编辑:活动记录查询缓存的范围是控制器的动作。 在我的情况下,后续http请求中的活动记录查询也更快。

可能的解释:

  1. ActiveRecord缓存
  2. 连接池(它不必重新启动连接)
  3. 在Web服务器或数据库服务器上加载。

ActiveRecord缓存查询结果。 第一个查询实际上是在访问数据库 - 然后ActiveRecord等待操作完成并将结果解析为其对象。 下次进行相同的查询时,它会缓存结果,以便立即返回给您,而不是一直返回数据库。

检查QueryCacheAPI :如果要清除缓存的查询,似乎可以清除查询缓存( connection.clear_query_cache )。

这个SO问题也表明self.class.uncached do ... end以绕过缓存,但我不确定这是否仍然适用于Rails 3。

这肯定是ActiveRecord你正在看的缓存。 见文档

所有这些方法都建立在一个简单的缓存原则之上,该原则将保留最后一个查询的结果,除非特别指示不这样做。 缓存甚至可以在各种方法之间共享,使得使用宏添加方法的成本更低,而不必担心第一次使用性能过高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM