satococoa's blog

主にサーバーサイド、Web 系エンジニアのブログです。Go, Ruby, React, GCP, ...etc.

ActiveRecordでリクエストごとに発行SQL数を数える

ActiveRecordで発行されたSQLの数を数えたくなったので調べてみました。

単純に、SQLが発行される事にカウントアップしていってリクエストの終了時にログに吐き出せばいいだけなんですが、「SQLが発行される毎にカウントアップ」の方法がよくわからずにとりあえずrails 3.2 のauto_explainは「SQLが発行される毎に」という何らかの方法を使っているだろうと思ってgrepで調べていったところ、ActiveSupport::Notificationsを見つけました。

ActiveSupport::NotificationsASCIIcasts - “Episode 249 - Rails 3のnotification(通知)”を見れば概要がわかりますが、ActiveSupport::Notifications.instrumentでイベントの発行を行い、発行されたイベントをActiveSupport::Notifications.subscribe("イベント名")でlistenする形なんですね。

結局以下のような形でSinatra Extensionとして実装してみました。

実際はクエリ数に応じて色を変えたり(10クエリ以上だったら赤字、それ未満だったら緑、みたいに)して使っています。
ActiveSupport::Notifications便利ですねー。良いものを覚えました。