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に以下を追記。
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/