はじめに
- 前の記事の続き
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
インスタンスの立ち上げっぱなしには気をつけましょう...