首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:基准测试rails ActiveRecord查询

Rails:基准测试rails ActiveRecord查询
EN

Stack Overflow用户
提问于 2010-08-06 05:16:00
回答 3查看 11.4K关注 0票数 15

我希望在我的应用程序中对几个ActiveRecord请求进行基准测试。在控制台中进行基准测试的最简单方法是什么

代码语言:javascript
复制
User.find_by_name("Joe").id

对比

代码语言:javascript
复制
User.find(:first, :select => :id, :conditions => ["name = ?","Joe"]).id

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-06 10:02:25

使用脚本/性能/基准测试:

代码语言:javascript
复制
script/performance/benchmarker 2000 "User.find_by_name('Joe').id" "User.first(:conditions => {:name => 'Joe'}, :select => 'id').id"

在我的dev机器上,它报告:

代码语言:javascript
复制
            user     system      total        real
#1      1.110000   0.070000   1.180000 (  1.500366)
#2      0.800000   0.050000   0.850000 (  1.078444)

因此,第二种方法似乎更快,因为它有更少的工作要做。当然,您应该在您的生产机器上使用生产环境对其进行基准测试:

代码语言:javascript
复制
RAILS_ENV=production script/performance/benchmarker 2000 "User.find_by_name('Joe').id" "User.first(:conditions => {:name => 'Joe'}, :select => 'id').id"

它可能会为您改变一些条件。

票数 2
EN

Stack Overflow用户

发布于 2013-11-02 11:34:58

这个问题有点陈旧,需要一个更新的答案。在生产场景之外对查询进行基准测试的最简单方法是在rails console中运行它(基准脚本不再位于Rails中)。然后,您可以简单地使用内置于Ruby中的Benchmark类进行测试。在Rails中运行以下命令:

代码语言:javascript
复制
puts Benchmark.measure { User.find_by_name("Joe").id }
puts Benchmark.measure { User.find(:first, :select => :id, :conditions => ["name = ?","Joe"]).id }

我会运行上述5次,去掉最小值和最大值,然后取其余三次运行的平均成本,以确定哪个查询会给您带来更好的性能。

这是自Rails doesn't show you the cost to actually construct your objects以来获得查询真实成本的最准确的解决方案。因此,虽然@Slobodan Kovacevic答案是正确的,因为日志显示了查询的日志记录,但long不会为您提供对象构造时间,这可能会缩短第二次查询的时间,因为您只填充了单个字段而不是所有用户字段。

票数 54
EN

Stack Overflow用户

发布于 2010-08-06 05:26:53

在开发模式中,每个查询都计时并记录在log/development.log中。您将具有类似于以下代码的代码:

代码语言:javascript
复制
Ad Load (1.4ms)  SELECT "ads".* FROM "ads" ORDER BY created_at DESC
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3419220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档