SysBenck
SysBenchはサーバーのベンチマークソフト
ベンチマーク対象は以下
- file I/O performance
- scheduler performance
- memory allocation and transfer speed
- POSIX threads implementation performance
- database server performance
インストール
インストールは至って簡単
# ./configure # ./autogen.sh # make # make check # make install
libtoolでエラーが発生する場合がある(SL6.1とか) その場合は、makeする前にディレクトリにあるlibtoolを削除してOS標準のlibtoolをシンボリックリンクとして設定しておけば吉。
mv libtool libtool.org ln -s /usr/bin/libtool libtool
普通にmakeするとlibtoolがエラーをはく。これはautoconfの問題だという事らしい
インストール要件としては以下
- MySQL Serverが稼働している
- MySQL-develがインストール済み
- perl-DBD-MySQLがインストール済み
さらにPostgreSQLにも対応している
- PostgreSQL Serverが稼働している
- PostgreSQL-develがインストール済み
./configure —with-pgsqlとする事でサポートされる
さらにはOracleDBにも対応している
DB関連もベンチする場合のインストール備忘録
# yum install mysql-server mysql-devel postgresql-server postgresql-devel # vi /etc/my.cnf [mysqld] default-character-set=utf8 ←追加 old_passwords=0 ←変更 [mysql] ←追加 default-character-set=utf8 ←追加 # service mysqld start # service postgresql start # vi /var/lib/pgsql/data/pg_hba.conf 全てをコメントアウトしてから local all all trust ←追加 host all all 127.0.0.1/32 trust ←追加 # vi /var/lib/pgsql/data/postgres.conf listen_address ←コメント外す port ←コメント外す # service postgresql restart # mysql mysql> ←ログインできる事を確認 mysql> quit # psql -U postgres postgres=# ←ログインできる事を確認 postgres=# \q # service cpuspeed stop
使い方
これが難解…
sysbench [common-options] --test=name [test-options] command
command | |
---|---|
prepara | テストを実行する前に必要な環境を作成する、–testがfileio、oltpの場合のみ |
run | 実行 |
cleanup | 何かのテストが実行された際に作成された一時データの削除 |
help | 基本的な使用方法表示 |
–test=name help | 指定されたテストモードの使用方法表示 |
version | バージョン表示 |
–test= | |
---|---|
fileio | ファイルIOテスト |
cpu | CPU性能テスト |
memory | メモリテスト |
threads | スレッド性能テスト |
mutex | Mutex性能テスト |
oltp | データベース性能テスト |
使うだろうと思われるやつ
common-options | デフォルト値 | |
---|---|---|
—num-threads=X | threadsの数 | 1 |
—max-request=X | リクエスト数 | 10000 |
—thread-stack-size | スレッドのスタックサイズ | 32K |
service cpuspeed stopを忘れない事
CPU
# sysbench --test=cpu run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing CPU performance benchmark Threads started! Done. Maximum prime number checked in CPU test: 10000 Test execution summary: total time: 18.0980s total number of events: 10000 total time taken by event execution: 18.0936 per-request statistics: min: 1.79ms avg: 1.81ms max: 2.88ms approx. 95 percentile: 1.85ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 18.0936/0.00
OLTP
データベースベンチマークの場合、デフォルトでsbtestという名称のデータベースを利用するので事前に作成しておく必要がある
MySQLの場合
# mysql mysql> create database sbtest; mysql> \q # sysbench --test=oltp --db-driver=mysql --mysql-user=STRINGS --mysql-password=STRINGS prepare sysbench 0.4.12: multi-threaded system evaluation benchmark Creating table 'sbtest'... Creating 10000 records in table 'sbtest'... # sysbench --test=oltp --db-driver=mysql --mysql-user=STRINGS --mysql-password=STRINGS run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing OLTP test. Running mixed OLTP test Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases) Using "BEGIN" for starting transactions Using auto_inc on the id column Maximum number of requests for OLTP test is limited to 10000 Threads started! Done. OLTP test statistics: queries performed: read: 140000 write: 50000 other: 20000 total: 210000 transactions: 10000 (431.16 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 190000 (8192.02 per sec.) other operations: 20000 (862.32 per sec.) Test execution summary: total time: 23.1933s total number of events: 10000 total time taken by event execution: 23.1183 per-request statistics: min: 1.95ms avg: 2.31ms max: 60.73ms approx. 95 percentile: 2.46ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 23.1183/0.00
PostgreSQLの場合
# createdb sbtest -U postgres # sysbench --test=oltp --db-driver=pgsql --pgsql-user=STRINGS --pgsql-password=STRINGS prepare sysbench 0.4.12: multi-threaded system evaluation benchmark Creating table 'sbtest'... NOTICE: CREATE TABLE will create implicit sequence "sbtest_id_seq" for serial column "sbtest.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "sbtest_pkey" for table "sbtest" Creating 10000 records in table 'sbtest'... # sysbench --test=oltp --db-driver=pgsql --pgsql-user=STRINGS --pgsql-password=STRINGS run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing OLTP test. Running mixed OLTP test Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases) Using "BEGIN" for starting transactions Using auto_inc on the id column Maximum number of requests for OLTP test is limited to 10000 Threads started! Done. OLTP test statistics: queries performed: read: 140000 write: 50000 other: 20000 total: 210000 transactions: 10000 (233.45 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 190000 (4435.62 per sec.) other operations: 20000 (466.91 per sec.) Test execution summary: total time: 42.8351s total number of events: 10000 total time taken by event execution: 42.7622 per-request statistics: min: 2.07ms avg: 4.28ms max: 207.00ms approx. 95 percentile: 6.43ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 42.7622/0.00
ちょっとはまった事
sysbenchでDB測定してたけど超遅い状態を検知した。
postgresqlの場合
fsync = off または synchronous_commint = off を設定するこれはDiskIOの待ちが大きかったために、COMMITで待たされる結果、sysbenchの結果が激遅いになってやつ
mysqlの場合
InnoDBで作成したtableに対して実行すると激遅い MyISAMはCPU依存速度が出る InnoDBでもsimpleテストは激早い --oltp-test-mode=simple トランザクション処理を行わないのがその理由sysbenchのオプションでエンジンを指定できる
--mysql-table-engine={myisam,innodb}
グラフ(テスト中)
sysbenchを使った結果