RailsQueryTracer hooks into ActiveRecord and helps you detect N+1 queries and slow queries in your Rails applications. It provides actionable insights and can optionally be integrated into a dashboard.
Add this line to your application's Gemfile:
gem "rails-query-tracer", "~> 0.1.0"Then execute:
bundle installOr install it manually:
gem install rails-query-tracerYou can customize RailsQueryTracer's behavior by setting options in an initializer (config/initializers/rails_query_tracer.rb):
RailsQueryTracer::Config.slow_queries_threshold = 50 # default is 20ms
RailsQueryTracer::Config.show_stack_trace = true # default is true
RailsQueryTracer::Config.log_to_file = "log/query_tracer.log" # optionalStart tracking SQL queries anywhere in your application (typically in a Rails initializer or a before hook):
RailsQueryTracer::Tracker.reset!
RailsQueryTracer::Tracker.startStop tracking if needed:
RailsQueryTracer::Tracker.stopAccess the collected queries:
queries = RailsQueryTracer::Tracker.queriesAnalyze tracked queries to detect N+1 or slow queries:
report = RailsQueryTracer::Analyzer.analyze(queries)report[:n_plus_one]→ array of detected N+1 queriesreport[:slow]→ array of slow queries exceedingRailsQueryTracer::Config.slow_queries_threshold(default 20ms)
Print a human-readable report:
RailsQueryTracer::Reporter.report(report)Sample output:
[RailsQueryTracer] N+1 Queries:
SELECT * FROM users repeated 5 times at app/models/post.rb:12
[RailsQueryTracer] Slow Queries:
SELECT * FROM orders (250.32ms) at app/controllers/orders_controller.rb:45
[RailsQueryTracer] Report Complete
- Reset Tracker before each request in development to avoid mixing queries from different actions.
- Ignore schema queries automatically—RailsQueryTracer ignores
SCHEMAqueries by default. - Combine with
bulletfor automated notifications in development if you want live alerts. - Adjust slow query threshold via
RailsQueryTracer::Config.slow_queries_threshold. - Avoid running in production unless you specifically need performance diagnostics, as it collects all queries in memory.
- Fork it (https://github.com/your-username/rails-query-tracer/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
MIT License