rack-mini-profiler を用いてSQL発行数を調べてみた。

はじめに

本記事は、初心者エンジニアな私が、趣味でECサイトを開発する中で、 rack-mini-profiler という gem を用いてSQLの発行数の計測をしていく様子を備忘録も兼ねて記していきますー!

計測しようと思った動機

  • そもそも、どのタイミングで、どんなSQLがどのくらい数、発行されているのか?について知りたい
  • N+1問題を解消するためのメソッドを仕込んでいるが、本当に解消できているのか分からない...

rack-mini-profiler gem で計測できること

  • レスポンスの時間
  • レンダリング(view)の時間
  • アクション(controller)の時間
  • SQLの実行回数
  • SQLの実行時間
  • メモリの計測

SQLの発行数だけではなく、様々なことが計測できるようです!すごい!

↓公式のリファレンスはコチラ↓ github.com

rack-mini-profiler gem を実際に使ってみた。

こんな感じに、各ページの測定結果が出てきました!(ブラウザのキャッシュが残っていると正常な情報が入手できないようなので、注意が必要とのこと。)

計測結果

計測しているページは、ECサイトのなかの商品一覧ページなのですが、全部で18回のSQLが発行されているようです。 ただ、これだけだと詳細が分からないので、1商品ごとに発行された各SQLの詳細について見てみます。

発行されたSQLに関する詳細
ふむふむ。。?

  • 1商品ごとに active_storage_attachments から商品に関するデータを取ってきている(SQL発行数:1回/1商品)

  • 1商品ごとに active_storage_blobs から商品画像データを取ってきている(SQL発行数:1回/1商品)

  • ECサイトのフロント側ソート機能で「商品価格:降順」を選択しているので、商品を順番通り取ってくるためのSQLSQL発行数:1回)

商品ごとに、正常なSQLが発行されていそうです!

ただ、Viewのレンダリングに少々時間がかかっている様子。。。 商品画像データが重いことが原因な気がします。 次回は、この部分の解決をしていきたい。。。!

余談

今回は、rack-mini-profiler というgem を利用しましたが、純粋にN+1問題だけを確認したい場合は、「Bullet」というgem の方が分かりやすい?みたいです。

ただ、rack-mini-profiler ではより詳しい情報が見ることができるので、active_storage_attachmentsや、active_storage_blobs から各データを取ってきていることなどが分かり、個人的には凄く勉強になったなあ。と思います!

さいごに

ここまでお読み頂きありがとうございました! 本記事が誰かの助けになれば幸いです〜!