LoginSignup
6
4

More than 5 years have passed since last update.

I/OスケジューラがMySQLにどの程度影響するのか確認してみる

Last updated at Posted at 2015-12-05

前提

AWSのm3.xlarge※を利用して、MySQLは5.6.27で計測を行ってみました。
※共有ハードウェアインスタンスのため厳密さはやや弱いです。
ボリュームタイプはプロビジョンドIOPSです。
計測対象のスケジューラは、cfq、noop、deadlineで、負荷の発生にはmysqlslapを利用しています。
設定はデフォルト値をそのまま利用しています。

ちなみに、上記の構成で構築した時のデフォルトとして利用されるI/Oスケジューラはnoopになっています。

$ cat /sys/block/xvda/queue/scheduler 
[noop] 

I/Oスケジューラの変更は以下のとおりです。
[]で囲まれているものが現在のスケジューラになります。

$ sudo sh -c "echo deadline > /sys/block/xvda/queue/scheduler"
$ cat /sys/block/xvda/queue/scheduler 
noop [deadline]

ファイルシステムはデフォルトのext4を利用しています。

$ df -T
ファイルシス   タイプ   1K-ブロック    使用   使用可 使用% マウント位置
/dev/xvda1     ext4        30830568 1718432 29011888    6% /
devtmpfs       devtmpfs     7693020      56  7692964    1% /dev
tmpfs          tmpfs        7702032       0  7702032    0% /dev/shm

構築(手抜き)

$ sudo yum install -y http://repo.mysql.com/mysql-community-release-el6.rpm
$ sudo yum install -y mysql mysql-devel mysql-server mysql-utilities perl-Data-Dumper
$ sudo service mysqld start
$ mysql --version
mysql  Ver 14.14 Distrib 5.6.27, for Linux (x86_64) using  EditLine wrapper

計測1(auto-generate-sql-load-type=write)

基本計測設定

並列度は10
実行回数は10
number-of-queriesは10000
クエリのタイプはwrite

mysqlslap1.sh
time mysqlslap \
  --no-defaults \
  --host=localhost \
  --port=3306 \
  --user=root \
  --engine=innodb \
  --auto-generate-sql \
  --auto-generate-sql-load-type=write \
  --auto-generate-sql-add-autoincrement \
  --number-char-cols=5 \
  --number-int-cols=10 \
  --number-of-queries=100000 \
  --concurrency=10 \
  --iterations=10

基本計測結果

計測結果は以下のとおりになりました。
Number of clients running queries: 10
Average number of queries per client: 1000

cfq noop deadline
Average 4.426 sec 4.340 sec 4.347 sec
Minimum 4.011 sec 4.230 sec 3.872 sec
Maximum 4.574 sec 4.624 sec 4.582 sec
real 0m46.638s 0m45.382s 0m46.070s
user 0m0.696s 0m0.564s 0m0.588s
sys 0m1.168s 0m1.192s 0m1.168s

並列度・number-of-queries変更

number-of-queriesを5倍、並列度を5倍にした場合の結果は以下のとおり。
Number of clients running queries: 50
Average number of queries per client: 1000  

cfq noop deadline
Average 5.948 sec 5.980 sec 5.869 sec
Minimum 5.506 sec 5.286 sec 5.450 sec
Maximum 6.193 sec 6.201 sec 6.033 sec
real 1m2.732s 1m2.405s 1m1.961s
user 0m2.596s 0m2.792s 0m2.572s
sys 0m5.360s 0m5.112s 0m5.124s

engine変更

上記の並列度・number-of-queriesに加えて、engineをmyisamした結果は以下のとおり。
Number of clients running queries: 50
Average number of queries per client: 1000 

cfq noop deadline
Average 2.541 sec 2.532 sec 2.533 sec
Minimum 2.491 sec 2.503 sec 2.504 sec
Maximum 2.558 sec 2.547 sec 2.551 sec
real 0m25.602s 0m25.510s 0m25.525s
user 0m3.732s 0m3.708 0m3.992s
sys 0m10.384s 0m0.308s 0m0.306s

計測2(auto-generate-sql-load-type=mixed)

基本計測設定

設定の変更はクエリのタイプをmixedに変更したのみ

mysqlslap2.sh
time mysqlslap \
  --no-defaults \
  --host=localhost \
  --port=3306 \
  --user=root \
  --engine=innodb \
  --auto-generate-sql \
  --auto-generate-sql-load-type=mixed \
  --auto-generate-sql-add-autoincrement \
  --number-char-cols=5 \
  --number-int-cols=10 \
  --number-of-queries=10000 \
  --concurrency=10 \
  --iterations=10

基本計測結果

計測結果は以下のとおりになりました。
Number of clients running queries: 10
Average number of queries per client: 1000

cfq noop deadline
Average 2.472 sec 2.505 sec 2.404 sec
Minimum 2.115 sec 2.091 sec 2.030 sec
Maximum 2.622 sec 2.736 sec 2.550 sec
real 0m27.417s 0m27.771s 0m26.355s
user 0m1.616s 0m1.636s 0m1.620s
sys 0m1.020s 0m1.040s 0m1.036s

並列度・number-of-queries変更

number-of-queriesを5倍、並列度を5倍にした場合の結果は以下のとおり。
Number of clients running queries: 50
Average number of queries per client: 1000 

cfq noop deadline
Average 3.883 sec 3.781 sec 3.815 sec
Minimum 3.645 sec 3.509 sec 3.299 sec
Maximum 4.034 sec 3.932 sec 4.157 sec
real 0m41.684s 0m41.348s 0m40.553s
user 0m6.180s 0m6.084s 0m6.304s
sys 0m5.472s 0m5.436s 0m5.452s

engine変更

上記の並列度・number-of-queriesに加えて、engineをmyisamした結果は以下のとおり。
Number of clients running queries: 50
Average number of queries per client: 1000 

cfq noop deadline
Average 2.293 sec 2.292 sec 2.296 sec
Minimum 2.281 sec 2.269 sec 2.287 sec
Maximum 2.307 sec 2.311 sec 2.310 sec
real 0m23.100s 0m23.088s 0m23.123s
user 0m7.472s 0m7.556s 0m7.644s
sys 0m6.644s 0m6.504s 0m6.500s

考察

innodbでauto-generate-sql-load-type=writeでは、ややdeadlineの方が性能が良いように見えるがそれほど大きな違いは無い。

おまけ

deadlineでMySQL5.7とMySQL5.6の比較をしてみる。
MySQLのバージョンは以下のとおり。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.9, for Linux (x86_64) using  EditLine wrapper

上記の計測と同様のnumber-of-queriesを5倍、並列度を5倍にした場合で計測しています。

auto-generate-sql-load-type=write

Number of clients running queries: 50
Average number of queries per client: 1000  

MySQL5.6.27 MySQL5.7.9
Average 5.869 sec 5.914 sec
Minimum 5.450 sec 5.572 sec
Maximum 6.033 sec 6.075 sec
real 1m1.961s 1m2.686s
user 0m2.572s 0m3.300s
sys 0m5.124s 0m5.708s

auto-generate-sql-load-type=mixed

Number of clients running queries: 50
Average number of queries per client: 1000  

MySQL5.6.27 MySQL5.7.9
Average 3.815 sec 4.100 sec
Minimum 3.299 sec 3.845 sec
Maximum 4.157 sec 4.208 sec
real 0m40.553s 0m44.659s
user 0m6.304s 0m6.096s
sys 0m5.452s 0m6.024s
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4