当我在我的应用程序中使用rack-mini-profiler(运行ruby 1.9.3 p194,rails 3.2.8和pg 0.14.0)时,我会得到非常奇怪的分析输出。通常它看起来像这样:
/da/brugte-biler/Fiat/Multipla autouncle.dev on Mon, 27 Aug 2012 13:30:50 GMT
duration (ms) from start (ms) query time (ms)
GET http://autouncle.dev:80/da/brugte-biler/F... 19.2 +0.0 3 sql 0.5
Executing action: search 83.4 +16.0 48 sql 9.4
Rendering: cars_search/table_listing 819.2 +99.0 356 sql 71.2
Rendering: cars/_reliability_report 12.5 +601.0
Rendering: cars_search/_sidebar 1093.7 +616.0 281 sql 356.7
Rendering: cars/_listing_table 1612.6 +1731.0 123 sql 549.5
Rendering: kaminari/_paginator 27.2 +3632.0
Rendering: layouts/search_results 31.3 +3671.0
Rendering: layouts/_shared_head_content 223.4 +3673.0
Rendering: partials/_top_links 2.6 +3907.0
Rendering: partials/_search_form 165.1 +3912.0
Rendering: partials/_footer_links 5.2 +4086.0
Rendering: layouts/_shared_footer_content 8.7 +4099.0
share show trivial show time with children 24.0 % in sql
这里奇怪的是,就是说,有一个名为356 sql语句。但事实并非如此。如果我点击它们,看看被叫什么,我会看到很多这样的陈述:
8.70 ms
Executing action: search — 7.70 ms
Executing action: search
T+23.7 ms
Reader
0.3 ms
app/models/car_search.rb:97:in `relation'
app/controllers/cars_search_controller.rb:102:in `pagination_relation'
app/controllers/cars_search_controller.rb:37:in `search'
app/controllers/controller_concerns/country_requesting.rb:66:in `select_database_shard'
lib/www_middleware.rb:11:in `call'
SELECT 1
Executing action: search
T+25.8 ms
Reader
0.2 ms
app/models/car_search.rb:97:in `relation'
app/controllers/cars_search_controller.rb:102:in `pagination_relation'
app/controllers/cars_search_controller.rb:37:in `search'
app/controllers/controller_concerns/country_requesting.rb:66:in `select_database_shard'
lib/www_middleware.rb:11:in `call'
SELECT 1
Executing action: search
T+26.8 ms
Reader
0.2 ms
app/models/car_search.rb:97:in `relation'
app/controllers/cars_search_controller.rb:102:in `pagination_relation'
app/controllers/cars_search_controller.rb:37:in `search'
app/controllers/controller_concerns/country_requesting.rb:66:in `select_database_shard'
lib/www_middleware.rb:11:in `call'
SELECT 1
它持续了356次。
我很困惑这是怎么回事。任何关于这可能是什么的线索?
更新:
car_search.rb中的代码是一个非常繁重的方法,它构建了相关的查询。基本上它的作用类似于:
def relation
cars = Car.onsale # a scope that says .where(:sales_state => 'onsale')
cars = cars.with_brand(brand) if brand.present? # a scope that says .where(:brand => 'some_brand')
cars = cars.with_model_name(model_name) if model_name.present? # a scope that says .where(:model_name => 'some_model_name')
return cars
end