MySQL

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

More than 3 years have passed since last update.

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

jmeterとかでごりょごりょとかしないとなのかーとか思ったのですが、

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

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

4.5.7 mysqlslap — Load Emulation Client


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、テーブルに対して実行したのですが、

他にもテキトーなクエリを自動生成して、ベンチマークを取ることもできるようです。

というかそのほうが本来の使い方っぽいですね。。。

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

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

ベンチマークというと手間かかるなーと思いがちですが、

これなら、実装後にさくっと確認できていい感じです!

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


感謝致します。