前提
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
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に変更したのみ
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 |