Benchmarking ActiveRecord and mysql2

Ruby on Rails

概要

  • RubyActiveRecordを使う場合と使わない場合におけるベンチマークがWebを探しても無かったので測ってみました。
  • 純粋な比較は難しいので、あくまでも参考値として見ていただければと思います。
  • 比較
    • activerecord (5.2.4.3)
    • mysql2 (0.5.3)

実験

測定方法

  • 純粋な比較が難しいので、とりあえず1行だけプライマリーキーで1行取得して変数に入れます。
  • usersテーブルは67カラムあります。
  • レコードのデータは、文字列に変換すると576バイトです。
  • 実行環境: ruby 2.6.6p146, MySQL: 5.7.29
  • on Docker on macos.

Activerecordの結果

6.6秒

pry(main)> puts Benchmark.measure { 10000.times { User.find(1) } }
  3.223594   0.814001   4.037595 (  6.624353)

mysql2の結果

3.5秒

pry(main)> puts Benchmark.measure { 10000.times { client.query('select * from users where id = 1').first } }
  1.157955   0.410513   1.568468 (  3.569280)

mysqlコマンドの結果

事前に1万行のクエリーを書いておいたファイルを実行してみました。

2.9秒

% time (cat select.sql | mysql -u root --password=$MYSQL_ROOT_PASSWORD test_database  -h db  > /dev/null)
real	0m2.935s
user	0m0.340s
sys	0m0.529s

まとめ

コメント