業務中にそこそこ大きなスキーマ変更をすることになり、実際パフォーマンスに変化があるかベンチマークを取る必要が出てきました。
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、テーブルに対して実行したのですが、
他にもテキトーなクエリを自動生成して、ベンチマークを取ることもできるようです。
というかそのほうが本来の使い方っぽいですね。。。
設定ファイルいじって性能確認する的な。
ともあれとってもお手軽!
ベンチマークというと手間かかるなーと思いがちですが、
これなら、実装後にさくっと確認できていい感じです!
もっと早く知りたかった・・・!
感謝致します。