テスト環境
- ホストマシン:Intel Core i5-3317U / 8GB RAM
- Dockerコンテナ構成
- RAMDSIK: mysql:5.5 + データボリュームコンテナ(ローカルのRAMDISK上のMYSQLフォルダをマウント)
- SSD: mysql:5.5 + データボリュームコンテナ(ローカルのSSD上のMYSQLフォルダをマウント)
ベンチマーク方法
MYSQLに標準で入っているベンチマークツールを使いました。
データは50万件ほどで、カテゴリで絞るSELECT文。
ベンチマーク方法は、こちらを参考にしました。
[bash] #MYSQLコンテナに入る docker exec -it mysql-ramdisk-server bin/bash #ベンチマークを実行 /usr/local/mysql/bin/mysqlslap\ --no-defaults\ --user=root\ --password=root\ --host=localhost\ --port=3306\ --engine=innodb\ --concurrency=100\ --iterations=30\ --create-schema=test_db\ --query="select * from test_table WHERE cat_id = 1;" [/bash]
同じ要領で、SSD版も取ります。
ベンチマーク結果
RAMDISK版
[bash] Benchmarkb Running for engine innodb Average number of seconds to run all queries: 27.906 seconds Minimum number of seconds to run all queries: 27.730 seconds Maximum number of seconds to run all queries: 28.124 seconds Number of clients running queries: 100 Average number of queries per client: 1 [/bash]
SSD版
[bash] Benchmark Running for engine innodb Average number of seconds to run all queries: 28.315 seconds Minimum number of seconds to run all queries: 20.799 seconds Maximum number of seconds to run all queries: 28.739 seconds Number of clients running queries: 100 Average number of queries per client: 1 [/bash]
ほとんど変わりませんでした。というか、最速ではSSDのが速いという。。。
RAMDISKなら、3倍くらい速いかと期待してたんですが。。。おそらく、DISK IO周りよりも、CPUがボトルネックになってるんでしょうね。RAMDISKはCPUをかなり使うようなので。
topコマンドで見る限り、どちらもCPUはフルで使っていたので、これ以上速度を上げるとしたら、DBの構造を見直すか、CPUをもっと速いやつにするしかなさそうです。