pgbenchとは
postgresqlのベンチマークツールで、postgresqlのパフォーマンスを計測できます。
postgresqlをチューニングする際に、とても役に立ちます。
使用方法
以下、コマンドラインで作業
1.postgresqlをインストール
こではバージョン9.4をインストールしました。
インストール情報はこちら
※postgresql9.4ではpgbenchが既にインストールされている状態ですので、個別でインストールする必要はありません。
2.postgresqlのスーパユーザアカウントでログイン
$ su - postgres
3.sqlを使用できるツールpsqlを起動
$ psql -U postgres
4.テスト用のデータベースを作成
ここでは「test」という名称のDBを作成しました。CREATE DATABASEと表示されればOKです。
postgres=# create database test;
CREATE DATABASE
5.psqlを¥qで終了する
$ ¥q
6.以下コマンドを実行し、ベンチマークデータを初期化する
$ pgbench -i test
実行履歴
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.64 s, remaining 0.00 s).
vacuum...
set primary keys...
done.
んっ、失敗・・・?
もう一回同じコマンドを実行
実行履歴
creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.70 s, remaining 0.00 s).
vacuum...
set primary keys...
done.
成功したぽい
ひとまず次へ進んでみよう・・・
7.以下コマンドでベンチマーク実行
pgbench -c 2 -t 100 test
実行結果
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 2
number of threads: 1
number of transactions per client: 100
number of transactions actually processed: 200/200
latency average: 0.000 ms
tps = 187.624829 (including connections establishing)
tps = 199.760088 (excluding connections establishing)
実行できました。
初期化を2回実行しましたが、1回目の初期化で成功してたみたいでした。
コマンドの説明
「-c 2」:同時に2本の接続
「-t 100」:各接続で100本のトランザクションを実行
「test」:データベースの指定
実行結果
「number of transactions actually processed: 200/200」:2本の接続×100本のトランザクション=200回中、200回正常に実行できたことを示しています。
「tps = 187.624829 (including connections establishing)」:1秒間に実行できたトランザクション数(PostgreSQLへの接続含む)
「tps = 199.760088 (excluding connections establishing)」:1秒間に実行できたトランザクション数(PostgreSQLへの接続含まない)
※tpsは数値が高いほど性能が良いです。
pgbenchがデフォルトで実行する1トランザクションのSQLは以下です。
a.pgbench_accountsを1件更新
b.pgbench_accountsから1件検索
c.pgbench_tellersを1件更新
d.pgbench_branchesを1件更新
e.pgbench_historyに1件行を追加
以下オプションを付けることでデフォルトの実行SQLを制御できます。
「-N」
cとdを除いたSQLを実行します。
pgbench -c 2 -t 100 -N test
「-S」
更新処理を除いたSQLを実行します。
pgbench -c 2 -t 100 -S test
次回は、pgbenchで計測しながら実際にチューニングを行っていきたいと思います。