もた日記

くだらないことを真面目にやる

Railsメモ(18) : rack-mini-profilerで簡単なパフォーマンスを計測する

github.com

多対多のリレーションがあるモデルに対してビューを変更したら大量のSQL文が実行されるようになったので、まず現状を確認してみる。
rack-mini-profilerというgemを追加すると簡単なパフォーマンス計測ができるようになるのでこれを使用してみる。
Gemfileに下記行を追加してbundle installする。

gem 'rack-mini-profiler'

なお、デフォルトで有効になっていると問題があることもあるらしいので、その場合はrequire: falseする。

rack-mini-profilerをGemfileに入れるときは require: false しよう - Qiita

gem 'rack-mini-profiler', require: false


そして、config/initializers/rack_profiler.rbに初期化コードを追加するらしい(試してはいない)。

if Rails.env == 'development'
  require 'rack-mini-profiler'

  # initialization is skipped so trigger it
  Rack::MiniProfilerRails.initialize!(Rails.application)
end

rack-mini-profilerの使い方


アプリケーションを再起動すると図のように画面左上にページのロードにかかった時間が表示されるようになる。

f:id:wonder-wall:20150816155549p:plain

そして、各計測結果をクリックするとさらに詳しい情報が表示される。

f:id:wonder-wall:20150816155705p:plain

さらに、sqlの部分をクリックすれば実行したSQL文が確認できる。

f:id:wonder-wall:20150816155901p:plain

現在はデータを100個ごとに表示しているが、そのデータそれぞれに対してSQL文を実行(合計102回も)していることが確認できた。このような問題は「N+1問題」と呼ばれており、この問題を検出するgemもあるので次ステップで改善してみる。