ようへいの日々精進XP

よかろうもん

EC2 と RDS で MySQL ベンチマークを取ってみた(2)〜ついでに MariaDB も〜

はじめに

  • 前の記事の続き
  • RDS をコマンドラインで構築する
  • MariaDB でも同じ環境でベンチマークを取ってみる

参考


構成

以下のような構成で検証を行った。

f:id:inokara:20140104092644p:plain

MySQLMySQL-ClusterMariaDB に関しては 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

RDSMySQL 5.6.13write のパフォーマンスが異常に悪いのが気になる...。今月は請求が厳しいwので来月あたりもう一度試してみる。前の記事でも同様になぜか read が極端に数値がデカイのも気になる。すべてのデータベースが軒並み同じ傾向なので mysqlslap のパラメータの調整が必要なのかもしれない。

billing の結果

ひいっ。

f:id:inokara:20140104090717p:plain

うっかりインスタンスを落とすのを忘れてしまいこのザマ。


最後に

  • read の性能ってこんなもんなんだろうか...
  • RDS インスタンスの立ち上げっぱなしには気をつけましょう...