パルカワ2

PerlとRubyとイチャラブ

SQLを実行する時、SQLに実行場所を追記する

ISUCONのPerlアプリでよく使用されているDBIx::Sunnyですが、便利な機能として、SQLがどこで実行されたかを実行されるSQLにコメントする機能があります。

こういう感じでスローログに表示されるので、どこでSQLが発行されているか探す必要がなくて便利です。

SELECT * FROM users /* lib/MyApp/Web.pm line 56  */

アプリケーションログではなく、SQL自体にコメントで入っている事が重要で、SQLを改善したい時に見るのは、アプリケーションログではなくスローログを見ます。スローログを見た時点で、どこで発行されたSQLなのかはっきりしていると無駄にそのSQLがどこで発行されたのか、探す必要がなくなり、実際に集中すべきSQLの改善に集中出来ます。というのを、Railsでもやりたかったので、ActiveRecordで作ってみました。github.com

ちなみにSQLに直接埋め込まれているので、Railsのアプリケーションログにも出ます。

Info Load (0.5ms)  SELECT  `infos`.* FROM `infos` /* /Users/hisaichi5518/projects/sample/app/cells/infos/index.html.erb:3:in `_app_cells_infos_index_html_erb___2113458239111152552_70242821135200' */