docker

MYSQL

サーバー

Mysql on Dockerで、SSDとRAMDISKの速度をベンチーマーク

テスト環境

  • ホストマシン:Intel Core i5-3317U / 8GB RAM
  • Dockerコンテナ構成
  1. RAMDSIK: mysql:5.5 + データボリュームコンテナ(ローカルのRAMDISK上のMYSQLフォルダをマウント)
  2. 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をもっと速いやつにするしかなさそうです。