Ubuntu上でMySQLデータをtmpfs上に配置する

テストが増えてRspecフル実行が10分以上かかる。何とかしたい。
MySQLデータメモリ上に置いて速くすれば良いんじゃね?
ということで、MySQLのデータファイルをtmpfsに置くことで速度向上を計ってみた。

前提

  • Ubuntu11.10
  • MySQL5.1

手順

tmpfsのマウント
 sudo mount -t tmpfs -o size=512m  tmpfs /mnt/mysql_tmpfs/
MySQLデータのバックアップ
 sudo service mysql stop
 sudo mv /var/lib/mysql /var/lib/mysql_backup
MySQLデータをコピー&シンボリックリンク作成
 sudo mkdir /mnt/mysql_tmpfs/mysql
 sudo cp -rf /var/lib/mysql_backup/* /mnt/mysql_tmpfs/mysql
 sudo ln -s /mnt/mysql_tmpfs/mysql /var/lib/mysql
AppArmor設定

このままMySQLを起動したところ起動しないので、/var/log/mysql/error.logを見たところ「Plugin 'FEDERATED' is disabled.〜」とか言われている。
これはAppArmorにより許可されていない場所にデータが配置されているためであり、以下のように該当フォルダの許可設定を追加する必要がある。

 sudo vi /etc/apparmor.d/usr.sbin.mysqld 
# 追加
/mnt/mysql_tmpfs/mysql/ r,
/mnt/mysql_tmpfs/mysql/** rwk,
MySQL起動
 sudo service mysql start

結果

「これでspecが5倍ぐらい速くなっちゃうだろうな、ヒャッハー!」と勢い良くRspec実行
→10分かかっていたspecが8分になっただけ。。。たった2割の向上。。。
どうやらMySQLのI/Oよりも、CPU性能やソースコード&fixtureの読み込みI/Oなどのほうが大きく性能に影響する模様。