如何在rails控制台获取执行时间?

问题描述 投票:0回答:3

我想比较执行时间

Post.all
SELECT * FROM posts
(或其他一些语句)我如何获得
Post.all
的执行时间?

sql ruby-on-rails time console
3个回答
273
投票

您可以使用内置的

Benchmark
模块:

timing = Benchmark.measure { Post.all }

提供了返回对象(Benchmark::Tms)的各种属性here:

  • cstime
    :孩子的系统CPU时间
  • cutime
    :孩子的用户CPU时间
  • label
    :标签
  • real
    :经过的实时时间
  • stime
    :系统CPU时间
  • total
    :总时间,即utime + stime + cutime + cstime
  • utime
    :用户CPU时间

如果要比较多个测量值,可以使用

Benchmark.bm
Benchmark.bmbm
:

Benchmark.bm do |x|
  x.report("Post.all") { Post.all }
  x.report("Measurement.all") { Measurement.all }
end

这将报告每次运行所花费的时间,以便您可以比较它们。


5
投票

使用 benchmark-ips gem:

2.3.0 :001 > require 'benchmark/ips'
=> true 
2.3.0 :002 > Benchmark.ips do |x|
2.3.0 :003 >       x.report("add: ") { 1+2 }
2.3.0 :004?>       x.report("div: ") { 1/2 }
2.3.0 :005?>       x.report("iis: ") { 1/2.0 }
2.3.0 :006?>   end
Warming up --------------------------------------
           add:    280.299k i/100ms
           div:    278.189k i/100ms
           iis:    266.526k i/100ms
Calculating -------------------------------------
           add:      11.381M (± 4.5%) i/s -     56.901M in   5.010669s
           div:       9.879M (± 4.6%) i/s -     49.518M in   5.024084s
           iis:       9.289M (± 4.2%) i/s -     46.376M in   5.001639s

0
投票

这是我的如何使用 gem 在 Rails 控制台中自动测量性能的版本:https://github.com/igorkasyanchuk/execution_time

它显示了您在请求期间已经看到的类似信息。

样品:

[METRICS]  Completed in 908.3ms | Allocations: 2894 | ActiveRecord: 0.9ms (queries: 13)

© www.soinside.com 2019 - 2024. All rights reserved.