関わっているサービスで使ってるMysqlが遅くて遅くてどうしようか迷っていたところ、
datadirをRAMDISKにすると早くなるっぽい、という情報を見つけてテストもかねてローカル環境で試してみました。
Cent OSと少し作法が違って、少しはまったのでメモもかねて。
ramdiskの作成
ほとんど、ここのとおり。
ramdiskディレクトリを作って、権限変更
sudo mkdir /ramdisk
sudo chmod 777 /ramdisk
ramdiskの設定を書き込み(14.04の場合)
/dev/shm /ramdisk tmpfs size=1536m 0 0
※16.04の場合は、先ほどのリンク先参照
ramdiskをマウント
sudo mount -a
※再起動の必要はなし
mysqlのデータディレクトリを変更
ここが案外はまったところ。CentOSだと、/etc/mysql/my.cnfの中の「datadir=」パスを変更すればOKなんだけど、Ubuntuだと、エラーで起動しない。
/var/log/mysql/error.logは、こんな感じ。
2017-07-28 14:44:29 0 [Warning] Can't create test file /ramdiskb/mysql/vagrant-ubuntu-trusty-64.lower-test
2017-07-28 14:44:29 0 [Warning] Insecure configuration for --secure-file-priv: Location is accessible to all OS users. Consider choosing a different directory.
2017-07-28 14:44:29 0 [Note] /usr/sbin/mysqld (mysqld 5.6.35) starting as process 11855 ...
2017-07-28 14:44:29 11855 [Warning] Can't create test file /ramdiskb/mysql/vagrant-ubuntu-trusty-64.lower-test
2017-07-28 14:44:29 11855 [Warning] Can't create test file /ramdiskb/mysql/vagrant-ubuntu-trusty-64.lower-test
/usr/sbin/mysqld: Can't change dir to '/ramdiskb/mysql/' (Errcode: 2 - No such file or directory)
2017-07-28 14:44:29 11855 [ERROR] Aborting
いろいろ調べると、ubuntuの場合、mysqlにファイル操作権限を与える設定があるようだ。
mysqlのフォルダ操作権限を変更
sudo vi /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql/ r, -->コメントアウト
/var/lib/mysql/** rwk, -->コメントアウト
/media/db2/mysql/ r,
/media/db2/mysql/** rwk,
参考:askubuntu
mysqlを再起動
sudo service mysql restart
これで、無事起動ができた。
変更後のベンチマークを軽く
マシン
Vagrant:Virtualbox on MacBook 12inch(2016)
OS:Ubuntu 14.04
MYSQL: 5.6
CPU:1core
RAM:1.5GB(うち、750Mをramdiskに割り当て)
DB
581,878レコード
単純なカテゴリ縛りのselect文。
select * from items WHERE cat_id = 1;
SSD:3.35sec
RAMDISK:0.42 sec
軽くベンチマークしただけですが、7-8倍くらい早くなりました。
もしかしたら、VirtualboxのSSDが遅いだけかもしれないけど、まあ、早くはなるだろうってことで。
VPSと比較
続いて、普段使っているVPSサーバーとの比較をしてみました。MYSQLのデータは、RAM DISKではなく、通常のSSD上に乗っかってます。
さくらVPS 2コア 1GBメモリ: 0.017 sec(平均)
VPSとはいえ、さすがにサーバー用のマシンを使っているので、RAM DISKにしたくらいでは勝てませんでした。ここ以上は、DISKではなくCPUがボトルネックになってくる領域なのかもしれません。
それでも、Core m7のMacbook上のVirtualbox(しかも1コア設定)でも、Xeonを乗せた2コアさくらVPSに近いくらいのスピードが出せていることから、Mysql on RAM DISKはある程度効果がありそうです。
Conoha 3コア 2GBメモリも計測したんだですが、常にCPUをMAX使っているマシンだったので、0.75 sec(平均)とかなり遅くなってしまい、参考にはなりそうにありませんね。