MYSQL

Ubuntu

Ubuntu のmysqlのデータをramdiskに移動する

関わっているサービスで使ってる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(平均)とかなり遅くなってしまい、参考にはなりそうにありませんね。