sysbenchはCPU、メモリ、ディスクなどに負荷をかけてベンチマークをとれるツールで、標準ではMySQLに対応したOLTP系の負荷掛けにも対応しています。
■本投稿の目的
最新(2016年8月8日現在)のsysbench 0.5 では、ネットに出回ってる情報と一部異なる手順であったのと、PostgreSQLで使用するにはマニュアルが無いなど、ちょっとしたつまづきがあったのでメモしておきます。
■環境
何度か本ブログで触れているCentOS 7.2環境、rpmでインストールしたPostgreSQL 9.5を使用します。
PostgreSQLインストール先(バイナリ配置先) /usr/pgsql-9.5/bin
PostgreSQL実行ユーザのホーム /var/lib/pgsql
PostgreSQLのデータディレクトリ($PGDATA) /var/lib/pgsql/9.5/data
PostgreSQLを起動しておきます。
# systemctl start postgresql-9.5.service
■sysbenchの入手
入手
https://github.com/akopytov/sysbench
rootユーザで適当なディレクトリに配置、解凍しておきました。
# cd /tmp
# unzip sysbench-0.5.zip
■sysbenchのインストール
sysbenchのマニュアルにはMySQL対応についてしか書かれていないため、この手順で少々試行錯誤しました。
# cd sysbench-0.5/
# ./autogen.sh
# ./configure --prefix=/usr/sysbench \
> --without-mysql \
> --with-pgsql=/usr/pgsql-9.5 \
> --with-pgsql-includes=/usr/pgsql-9.5/include \
> --with-pgsql-libs=/usr/pgsql-9.5/lib
# make
成功すると、以下の状態になっていることを確認
- /tmp/sysbench-0.5/sysbench配下に、sysbenchコマンドが作成される。
- /tmp/sysbench-0.5/sysbench/drivers/pgsql 配下に、ドライバモジュールが作成される。
# ls /tmp/sysbench-0.5/sysbench/drivers/pgsql
Makefile Makefile.am Makefile.in drv_pgsql.c libsbpgsql.a libsbpgsql_a-drv_pgsql.o
なお、実行ユーザでPATHを通しておくと便利なので、今回はpostgresユーザで環境変数を設定しておきます。
# su - postgres
$ vi .bash_profile
-----
export PATH=/tmp/sysbench-0.5/sysbench:.:$PATH
-----
$ source .bash_profile
■実行前のPostgreSQL側の作業
sysbenchでは、デフォルトでlocalhost、sbtestデータベース、sbtestユーザ、5432ポートでPostgreSQLにアクセスします。そのつもりでPostgreSQL側の環境を準備します。
$ psql
postgres=# CREATE ROLE sbuser login password 'sbpass';
CREATE ROLE
postgres=# CREATE DATABASE sbdb OWNER sbuser;
CREATE DATABASE
postgres=# \q
今回はいろいろ試すべく、データベース名、ユーザ名、パスワードそれぞれ変えておきました。
■sysbenchの実行
oltpベンチマークの実行では、sysbenc 0.4までと違って、testモードを以下のように指定します。
sysbench/tests/db/ディレクトリを見ると、ベンチマークのパターンごとにluaファイルが用意されているので、これを指定しています。
まずは、prepareでテーブル等の準備をします。
$ sysbench --test=/tmp/sysbench-0.5/sysbench/tests/db/oltp.lua \
> --db-driver=pgsql \
> --pgsql-user=sbuser --pgsql-password=sbpass --pgsql-db=sbdb \
> prepare
sysbench 0.5: multi-threaded system evaluation benchmark
Creating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'
つづいてベンチマークの取得です。
$ sysbench --test=/tmp/sysbench-0.5/sysbench/tests/db/oltp.lua \
> --db-driver=pgsql \
> --pgsql-user=sbuser --pgsql-password=sbpass --pgsql-db=sbdb \
> run
sysbench 0.5: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored
Initializing worker threads...
Threads started!
OLTP test statistics:
queries performed:
read: 140000
write: 40000
other: 20000
total: 200000
transactions: 10000 (96.53 per sec.)
read/write requests: 180000 (1737.48 per sec.)
other operations: 20000 (193.05 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 103.5983s
total number of events: 10000
total time taken by event execution: 103.5635s
response time:
min: 4.04ms
avg: 10.36ms
max: 23.20ms
approx. 95 percentile: 10.97ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 103.5635/0.00
実行時のオプションでは、OLTPの並列度や実行回数などを調整可能です。
その辺の実行方法や、結果の見方は別の機会に。