LoginSignup
64
63

More than 5 years have passed since last update.

RailsアプリでSQLを発行している場所を特定するのにquery_traceとかいうgemがぐう便利

Posted at

RailsアプリでクソみたいなSQLを大量に発行している箇所を知りた〜い

Railsアプリで、発行されるSQLの量を頑張って減らすときに、例えばN+1問題をなんとかしたいと思ってBulletとかいうgemを入れて、N+1を出している箇所を特定したりする場合は多いと思います。

実際bulletはすっごい便利なんですが、N+1問題を発生させている箇所を検出できない場合があったり、そもそもの原因がもともと書いているロジックが悪くて、それの見直しで解決しなきゃいけない場合だったりとかする場合がよくあると思います。

で、それで前々から
「このTerminalに出てくるSQL文、Railsアプリのどこが出してるのかな〜それがわかったら超ベンリなのにな〜〜〜」と思ってました。
会社の同期に聞いたらめっちゃ便利なのがあったんで以下に書きます。もっと早く知りたかった。

query_traceをぶっこむ

query_traceとかいうgemがあります。これを入れます。
https://rubygems.org/gems/query_trace
ただ、↑の奴はバージョンが古く、
最近のrailsに対応しているのがgithubにありますのでそっちを入れます。↓
https://github.com/dolzenko/query_trace

Gemfileに以下を追記。

Gemfile
group :development, :test do
  gem 'query_trace', :git => 'http://github.com/dolzenko/query_trace.git'
end

あとはTerminalで

$ bundle install

実行方法

rails sするときに以下みたいな感じで起動

$ QUERY_TRACE=true rails s

以降、発行されるSQLがどこから来たのかが出てきます。

おまけ

N+1問題ってなによ
http://www.syboos.jp/hibernate/doc/20080806135128920.html

Bulletについて
http://morizyun.github.io/blog/speed-up-rails-bullet/

64
63
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
63