supersmackを使ったMysqlベンチマーク
supersmackはリモートでmysqlにログインしてテストデータに対して、~
同時接続数や試行回数を指定してSQLは発行して処理時間などを図ることのできるツール~
テストデータはパッケージに含まれているコマンドgen-dataで作成できる~
注意点
supersmack自体の負荷が結構高いのでベンチ対象とは違うサーバで実行しよう
インストール
wget http://vegan.net/tony/supersmack/super-smack-1.3.tar.gz tar super-smack-1.3.tar.gz tar xvzf super-smack-1.3.tar.gz cd super-smack-1.3 ./configure --with-mysql --prefix=$HOME --with-smacks-dir=$HOME/share --with-datadir=$HOME/var make make install
テストデータの作成
gen-data -n 90000 -f %12-12s%n,%25-25s,%n,%d > /tmp/words.dat~
オプション
-n データ行数を指定 -f データフォーマットを指定(カンマ区切り) s 文字列(上記の場合、%12-12で12文字に制限、などの指定が可能) d ランダムな整数値 n 1,2,3,…と単調増加する整数値
中身はこんな感じのが90000行ある
mhokdtjblikw89957,wqatcqwwrgtnlwksnekbncnrv,89957,1141375699 ukjfhiyjdbac89958,xrirhtqtmexahmcueavbkgjro,89958,1002925258 dtldvlwgfgbv89959,bpabrknthtuevfmhadpdxbjvo,89959,1748561933 dtrgpuxrvqck89960,mkghqcpdlrgbwgeifstkmlqeg,89960,77060791 wehbounveeav89961,jmpspnywxgprqffhjnygsikjd,89961,790607123
Mysqlの設定 [#h6aba7f9]
>grant select,insert,update,delete on *.* to bench@[hostname] identified by 'passwd';
テスト用テーブルの作成
>CREATE TABLE test.http_auth (username char(255) not null primary key, pass char(25), uid integer, gid integer);
テストデータをインポート
>LOAD DATA LOCAL INFILE '/tmp/words.dat' INTO TABLE test.http_auth FIELDS TERMINATED BY ',';
※LOCALつけるのを忘れるとインポートできないことがあるので注意
supersmackの設定 [#k117ec5d]
supersmackの設定ファイルを修正する
vim /root/share/select-key.smack
実行するための修正点は以下のところ
ベンチ対象の情報を記載する。~
4 user "bench"; 5 host "172.16.50.17"; 6 db "test"; 7 pass "passwd"; 64 user "bench"; // connect as this user 65 pass "passwd"; // use this password 66 host "172.16.50.17"; // connect to this host 67 db "test"; // switch to this database
ベンチマーク実行
下記は設定した内容で同時接続数10、試行回数10でベンチを取っている
# super-smack /root/share/select-key.smack2 10 10
実行結果は以下のように出る
Query Barrel Report for client smacker1 connect: max=7ms min=1ms avg= 4ms from 10 clients Query_type num_queries max_time min_time q_per_s select_index 200 42 0 286.40
そのほか細かい設定はselect-key.smackファイルの以下のディレクティブで指定できる。
12 // ensure the table exists and meets the conditions 34 //define a dictionary 47 //define a query