session の保存方法(session_store)の違いによるパフォーマンス(処理速度)テスト

cookie (default), ActiveRecord (:active_record_store), memcached (:mem_cache_store) を比較した。

なお、セッション新規作成時(record insert)と、既にあるセッションでアクセスする時も比較した。

環境

findテストと同じですが、

  • App Server
    • Amazon EC2: Large Instance
    • Apache: デフォルト設定
    • Ruby: 1.8.7
    • Passenger
      • RailsEnv: production
      • RailsMaxPoolSize: 30
      • RailsPoolIdleTime: 1200
    • Rails: 2.3.8
  • Request 兼 DB Server
    • Amazon EC2: Large Instance
    • DB: MySQL
      • my-innodb-heavy-4G.cnf を元にmax_connectionsなど4,5つ値を調整した設定を使用
    • ab (Apache Bench) でApp Serverに対してリクエス
      • 100件同時接続を5秒間続けて、どれくらいリクエストを処理できたかを見る
# セッション新規作成
$ ab -c 100 -t 5 http://ec2-***.amazonaws.com/session_check

# 既にあるセッションでアクセス
$ ab -c 100 -t 5 -C '_session_id=****' http://ec2-***.amazonaws.com/session_check

結果

  off cookie (ins) cookie (slct) activerecord (ins) activerecord (slct) memcache (ins) memcache (slct)
Complete requests 2128.7 2026.6 1981.2 1025.6 1128.2 1600.7 1457.8
Requests per second 425.463 404.809 395.485 204.838 225.427 319.79 291.229

  • off: セッション無し
  • (ins): セッション新規作成時
  • (slct): 既にあるセッションでアクセス時


cookie > memcache > activerecord の順番は予想通りだけど、
思った以上に activerecord 遅い。。