module OccamsRecord::Measureable
Measure the time each query takes. Useful for figuring out which query is the slow one when you're doing a bunch of eager loads.
orders = OccamsRecord
.
query(Order.all). eager_load(:customer). ... measure { |x| puts "Total time: #{x.total_time} sec" x.queries.each { |q| puts "Table: #{q.table_name} (#{q.time} sec)" puts q.sql } }. run
Public Instance Methods
measure(&block)
click to toggle source
Track the run time of each query, and the total run time of everything combined.
@yield [OccamsRecord::Measurements] @return self
# File lib/occams-record/measureable.rb, line 28 def measure(&block) @measurements ||= [] @measurement_results_block = block self end
Private Instance Methods
measure!(table_name, sql) { || ... }
click to toggle source
# File lib/occams-record/measureable.rb, line 40 def measure!(table_name, sql) result = nil time = Benchmark.realtime { result = yield } @measurements << Measurement.new(table_name, sql, time) result end
measure?()
click to toggle source
# File lib/occams-record/measureable.rb, line 36 def measure? !@measurements.nil? end
record_start_time!()
click to toggle source
# File lib/occams-record/measureable.rb, line 47 def record_start_time! @start_time = Time.now if top_level_measurer? end
top_level_measurer?()
click to toggle source
# File lib/occams-record/measureable.rb, line 59 def top_level_measurer? defined?(@measurement_results_block) && !@measurement_results_block.nil? end
yield_measurements!()
click to toggle source
# File lib/occams-record/measureable.rb, line 51 def yield_measurements! if top_level_measurer? total_time = Time.now - @start_time measurements = Measurements.new(total_time, @measurements.sort_by(&:time)) @measurement_results_block.call(measurements) end end