恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

1分でできる!mysqlslapでDBのかんたん性能調査、ベンチマーク

業務中にそこそこ大きなスキーマ変更をすることになり、実際パフォーマンスに変化があるかベンチマークを取る必要が出てきました。


jmeterとかでごりょごりょとかしないとなのかーとか思ったのですが、 今回はスキーマ変更のみなので、単純にDBのみの測定でよいので、なんかいいツールはないかと探したところ、

mysqlslapなるものがあるようなので試してみました


MySQL :: MySQL 5.7 Reference Manual :: 4.5.7 mysqlslap — Load Emulation Client

MySQLクライアント負荷エミュレーション mysqlslap を使う - Qiita

mysqlslapはMySQLサーバのクライアント負荷をエミュレートし、各ステージのタイミングを報告する診断プログラムです。サーバにたいして複数のクライアントがアクセスしているかのように作動します。mysqlslapはMySQL 5.1.4.から提供されています。

さっそく試してみーる

使い方

mysqlがインストールされていれば標準でmysqlslapもインストールされているはずなので、すぐ使えます

基本的には、測定する際特定のスキーマを作って、テキトーなクエリを実行してベンチマークを取る感じのようですが、 今回は実際の本番相当のデータ量のテーブルを用意し、それに対して測定を行いました。

#測定するSQL
SELECT * FROM TMP_TABLE WHERE hoge = 'hoge'
/usr/local/mysql/bin/mysqlslap\
 --no-defaults\
 --user=USER\
 --password=PASS\
 --host=localhost\
 --port=3306\
 --engine=innodb\
 --concurrency=500\
 --iterations=30\
 --create-schema=TMP_DB\
 --query="SELECT * FROM TMP_TABLE WHERE hoge = 'hoge'"


Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.755 seconds
        Minimum number of seconds to run all queries: 0.702 seconds
        Maximum number of seconds to run all queries: 0.795 seconds
        Number of clients running queries: 500
        Average number of queries per client: 1

的な感じでベンチマーク取れます! 500回SELECTするのを30回行い、それらの最大最小平均が取れます

オプション
オプション 内容
no-defaults 設定ファイルに書かれたデフォルトをスキップ
user 接続ユーザ
password パスワード
host mysqlのhost
port mysqlのpoot
engine 対象ストレージエンジン
concurrency シミュレートする実行の数
iterations 実行するテストの回数
create-schema テストを実行するスキーマ
query 実行するクエリ(ファイル指定も可能)

今回は作成済みのDB、テーブルに対して実行したのですが、 他にもテキトーなクエリを自動生成して、ベンチマークを取ることもできるようです。 というかそのほうが本来の使い方っぽいですね。。。

設定ファイルいじって性能確認する的な。



ともあれとってもお手軽!

ベンチマークというと手間かかるなーと思いがちですが、 これなら、実装後にさくっと確認できていい感じです!

もっと早く知りたかった・・・!




感謝致します。

f:id:ogataka50:20150708173637j:plain