QueryTrace is a Rails plugin for pinpointing where in your Rails application that slow query is running. While ActiveRecord takes you half-way there by logging all queries and how long they’re taking, it won’t answer the question of where they’re being executed. Enter QueryTrace – once you have it installed, your logs won’t just tell you that you have a problem, they will pinpoint the exact location of that problem for you.
Installation
svn export https://terralien.devguard.com/svn/projects/plugins/query_trace vendor/plugins/query_trace
Usage
All you have to do is have the plugin installed – QueryTrace takes care of the rest, including:
- Only displaying when at the DEBUG log level
- Honoring your log colorization settings
Example
Before
Schedule Load (0.023687) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.001076) SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1 Schedule Load (0.011488) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.022471) SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1
After
Schedule Load (0.023687) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 app/models/available_work.rb:50:in `study_method' app/helpers/plan_helper.rb:4:in `work_description' app/views/plan/_resource_schedule.rhtml:27:in `_run_rhtml_plan__resource_schedule' app/views/plan/_resource_schedule.rhtml:24:in `_run_rhtml_plan__resource_schedule' app/views/plan/_schedule_listing.rhtml:5:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:3:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:1:in `_run_rhtml_plan__schedule_listing' app/views/plan/index.rhtml:6:in `_run_rhtml_plan_index' vendor/plugins/textmate_footnotes/lib/textmate_footnotes.rb:60:in `render' Resource Load (0.001076) SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1 app/models/available_work.rb:54:in `div_type' app/helpers/plan_helper.rb:6:in `work_description' app/views/plan/_resource_schedule.rhtml:27:in `_run_rhtml_plan__resource_schedule' app/views/plan/_resource_schedule.rhtml:24:in `_run_rhtml_plan__resource_schedule' app/views/plan/_schedule_listing.rhtml:5:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:3:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:1:in `_run_rhtml_plan__schedule_listing' app/views/plan/index.rhtml:6:in `_run_rhtml_plan_index' vendor/plugins/textmate_footnotes/lib/textmate_footnotes.rb:60:in `render' Schedule Load (0.011488) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 app/models/available_work.rb:50:in `study_method' app/helpers/plan_helper.rb:4:in `work_description' app/views/plan/_resource_schedule.rhtml:27:in `_run_rhtml_plan__resource_schedule' app/views/plan/_resource_schedule.rhtml:24:in `_run_rhtml_plan__resource_schedule' app/views/plan/_schedule_listing.rhtml:5:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:3:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:1:in `_run_rhtml_plan__schedule_listing' app/views/plan/index.rhtml:6:in `_run_rhtml_plan_index' vendor/plugins/textmate_footnotes/lib/textmate_footnotes.rb:60:in `render' Resource Load (0.022471) SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1 app/models/available_work.rb:54:in `div_type' app/helpers/plan_helper.rb:6:in `work_description' app/views/plan/_resource_schedule.rhtml:27:in `_run_rhtml_plan__resource_schedule' app/views/plan/_resource_schedule.rhtml:24:in `_run_rhtml_plan__resource_schedule' app/views/plan/_schedule_listing.rhtml:5:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:3:in `_run_rhtml_plan__schedule_listing' app/views/plan/_schedule_listing.rhtml:1:in `_run_rhtml_plan__schedule_listing' app/views/plan/index.rhtml:6:in `_run_rhtml_plan_index' vendor/plugins/textmate_footnotes/lib/textmate_footnotes.rb:60:in `render'
Feedback
Feedback is welcome – just drop us an email. Hope it helps you!

