はじめに
- 前の記事の続き
RDSをコマンドラインで構築するMariaDBでも同じ環境でベンチマークを取ってみる
参考
構成
以下のような構成で検証を行った。

MySQL と MySQL-Cluster と MariaDB に関しては EC2 インスタンス上に構築して同一ホスト上から mysqlslap を実行した。。RDS に関しては別途コントロール用のインスタンス(上図の RDS Console)を構築して、そのインスタンスから mysqlslap を実行した。
RDS を awscli で操作する
RDS インスタンスの構築
ベンチマークに必要な RDS インスタンスを以下のようなパラメータで構築する。
| パラメータ | 値 | 備考 |
|---|---|---|
| master-username | ${mysql_user} | |
| master-user-password | ${mysql_password} | |
| engine | mysql | 他にも oracle- や sqlserver- も選択可能(PostgreSQL も) |
| allocated-storage | 8 | インスタンスのディスク容量 |
| engine-version | 5.5.8 | MySQL のバージョン |
| availability-zone | ap-northeast-1a | |
| publicly-accessible | enable | |
| db-instance-class | db.m2.4xlarge | インスタンスのタイプ |
| db-instance-identifier | rdstest1 | インスタンスの名前 |
| db-security-groups | test | インスタンスに適用するセキュリティグループ |
コマンドは以下のとおり。
aws rds create-db-instance \
--master-username ${mysql_user} \
--master-user-password ${mysql_password} \
--engine MySQL \
--allocated-storage 8 \
--engine-version 5.5.8 \
--availability-zone ap-northeast-1a \
--publicly-accessible \
--db-instance-class db.m2.4xlarge \
--db-instance-identifier rdstest1 \
--db-security-groups test
ひと通りベンチマークが終わったら速やかに RDS インスタンスを削除する。削除も以下のように awscli を使う。
aws rds delete-db-instance --db-instance-identifier rdstest1 --skip-final-snapshot
サクッとインスタンスを削除することが出来る。
MariaDB でもベンチマーク
さくっと以下のようなスクリプトを UserData にかまして構築。
#!/bin/bash
# mariadb.sh
yum -y install perl-DBI.x86_64
cd /tmp/
for i in server common compat client
do
wget http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/mariadb-5.5.34/yum/centos6-amd64/rpms/MariaDB-5.5.34-centos6-x86_64-${i}.rpm
done
rpm -Uvh /tmp/MariaDB-5.5.34-*
/etc/init.d/mysql start
for i in key read write
do
echo ${i} >> /tmp/bench_result.csv
/usr/bin/mysqlslap --no-defaults --concurrency=50 --iterations=3 --number-int-cols=2 --number-char-cols=3 \
--auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=${i} --auto-generate-sql-write-number=1000 \
--number-of-queries=100000 --host=localhost --port=3306 --user=root --csv=/tmp/bench_result.csv
done
以下のように EC2 インスタンスを起動。
id=`aws ec2 run-instances --image-id ami-xxxxxxx --count 1 --instance-type m1.medium --key-name ${your_keyname} --security-group-ids sg-xxxxxxx --subnet-id subnet-xxxxxxx --associate-public-ip-address --user-data file://user_data/mariadb.sh |jq '.Instances[]|.InstanceId' | sed 's/"//g'`
aws ec2 create-tags --resources $id --tags Key=Name,Value=MariaDB-test
ベンチマークの結果
key と read と write の結果
改めて取得してみたところ以下のような結果となった。
| DB | key(sec) | read(sec) | write(sec) | 備考 |
|---|---|---|---|---|
| MySQL(ap-northeast-1c) | 17.777 | 300.991 | 28.458 | MySQL 5.5.34 |
| MySQL Cluster(ap-northeast-1c) | 19.681 | 295.528 | 28.077 | MySQL-Cluster-7.3 |
| RDS(ap-northeast-1a) | 6.404 | 377.012 | 19.165 | MySQL 5.5.8 |
| RDS(ap-northeast-1a) | 6.539 | 348.437 | 74.169 | MySQL 5.6.13 |
| MariaDB(ap-northeast-1c) | 19.473 | 291.936 | 23.163 | MariaDB 5.5.34 |
尚、ベンチマークのオプションは以下のとおり。
mysqlslap --no-defaults --concurrency=50 --iterations=3 --number-int-cols=2 --number-char-cols=3 \
--auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=[key|read|write] --auto-generate-sql-write-number=1000 \ --number-of-queries=100000 --host=${host} --port=3306 --user=${user} --csv=/tmp/bench_result.csv
RDS の MySQL 5.6.13 で write のパフォーマンスが異常に悪いのが気になる...。今月は請求が厳しいwので来月あたりもう一度試してみる。前の記事でも同様になぜか read が極端に数値がデカイのも気になる。すべてのデータベースが軒並み同じ傾向なので mysqlslap のパラメータの調整が必要なのかもしれない。
billing の結果
ひいっ。

うっかりインスタンスを落とすのを忘れてしまいこのザマ。
最後に
readの性能ってこんなもんなんだろうか...RDSインスタンスの立ち上げっぱなしには気をつけましょう...