MySQLのベンチマーク
インフラエンジニアやDBA、またはある程度技術力のある開発のエンジニアでMySQLを利用してサービスを提供している場合、何かしらベンチマークをおこなわなければならないシーンが発生するのではないでしょうか。
- MySQLのメジャーバージョンを上げる前
- インスタンスやサーバの移行前
- システムのパフォーマンスが上がらない時
- パラメータ設定を変更する前
- とにかく性能にこだわりたい時
色々事情はあると思いますが、ベンチマークをおこなう時はなるべくシンプルに性能が比較できて、簡単なものがいいですよね。
MySQLのベンチマークツール
MySQLのベンチマークをおこなうときに利用できるツールはたくさんあります。比較的よく知られているものだと、下記のようなものになります。
- mysqlslap
- jdbcRunner
- workbench
- sysbench
- tpcc-mysql
それぞれベンチマークの結果については特徴があるのですが、一番古くから利用されていて簡単なものがsysbenchです。sysbenchはそれほど細かい条件や環境に合わせた設定はできませんが、シンプルにパフォーマンスを比較するのであれば一番やりやすいでしょう。
その他で比較的設定が簡単なものであればtpcc-mysqlがおすすめです。クエリを指定したいのであればjdbcRunnerもいいでしょう。ベンチマークをおこなう条件によってもまちまちで、どれが一番いいとは一概には言えませんが、ここでは一番簡単に実施できて、利用している方も多いsysbenchの使い方をお伝えします。
sysbenchのインストール
- ダウンロードとインストール
wget http://downloads.mysql.com/source/sysbench-0.4.12.5.tar.gz tar xzvf sysbench-0.4.12.5.tar.gz cd sysbench-0.4.12.5 ./configure make make install
- MySQLの準備
mysql>create database bench; mysql>GRANT ALL ON bench.* TO benchuser@"localhost" IDENTIFIED BY "benchuser";
- ベンチマーク用データのロードと使い方
/usr/local/bin/sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-user=benchuser --mysql-password=benchuser prepare /usr/local/bin/sysbench --test=oltp help
sysbenchを利用したベンチマーク方法
単純に実施するのであれば、下記を実施してexecution timeの比較のみでいいでしょう。スレッド数やリクエスト数は色々変えながら実施してください。あまり一瞬でベンチマークが終わってしまうと比較にならないので、ある程度時間がかかるくらいまで増やしていくのがいいでしょう。
/usr/local/bin/sysbench --test=oltp --oltp-table-size=1000000 --num-threads=4 --max-requests=20000 --max-time=0 --oltp-test-mode=complex --mysql-user=benchuser --mysql-password=benchuser run
insertやupdateのみのベンチマークを見たい場合は下記のように条件をかえてみましょう。
* パターン① /usr/local/bin/sysbench --test=oltp --oltp-table-size=1000000 --num-threads=4 --max-requests=20000 --max-time=0 --oltp-test-mode=nontrx --oltp-nontrx-mode=insert --mysql-user=benchuser --mysql-password=benchuser run * パターン② /usr/local/bin/sysbench --test=oltp --oltp-table-size=1000000 --num-threads=4 --max-requests=20000 --max-time=0 --oltp-test-mode=nontrx --oltp-nontrx-mode=update_key --mysql-user=benchuser --mysql-password=benchuser run * パターン③ /usr/local/bin/sysbench --test=oltp --oltp-table-size=1000000 --num-threads=4 --max-requests=20000 --max-time=0 --oltp-test-mode=nontrx --oltp-nontrx-mode=update_nokey --mysql-user=benchuser --mysql-password=benchuser run
ここでは最低限の使い方だけを説明してきましたが、helpを見れば細かい変更などもできるので、色々試してみながら実施していくのがいいでしょう。
MySQLの基本を学ぶならこちらがおすすめ