pgbench 1.2 README 2000/1/15 Tatsuo Ishii (t-ishii@sra.co.jp) ■pgbench とは? pgbench は TPC-Bに似たベンチマークテストを行なうプログラムです。今のと ころ PostgreSQL 専用です。 pgbench は select/update/insert を含むトランザクションを実行し、全体の 実行時間と実際に完了したトランザクションの数から 1 秒間に実行できたト ランザクション数 (tps) を表示します。処理の対象となるテーブルはデフォ ルトでは 10万タプルのデータを含みます。 実際の表示は以下のような感じです。 number of clients: 4 number of transactions per client: 100 number of processed transactions: 400/400 tps = 19.875015(including connections establishing) tps = 20.098827(excluding connections establishing) pgbench は JDBCBench という、もともとは MySQL 用に書かれた JDBC 用のベ ンチマークプログラムを参考に作成されました。 ■pgbench の特徴 o C 言語と libpq だけで書かれているので移植性が高く、簡単にインストー ルできます。 o pgbench は libpq の非同期処理機能を使ってマルチユーザ環境をシミュレー トします。容易に同時接続環境をテストできます。 ■pgbench のインストール Makefileの一番上にある POSTGRESHOME = /usr/local/pgsql を必要に応じて修正し、configure;make するだけです。 ■pgbench の使い方 基本的な使い方は、 $ pgbench [データベース名] です。データベース名を省略すると、ユーザ名と同じデータベースを指定した ものとみなします。データベースは後述の -i オプションを使ってあらかじめ 初期化しておく必要があります。 pgbench にはいろいろなオプションがあります。 -h ホスト名 PostgreSQLのデータベースデーモン postmaster の動 いているホスト名を指定します。省略すると自ホストに Unix domain socket で接続します。 -p ポート番号 postmaster の使用するポート番号を指定します。省略すると 5432 が指定されたものとみなします。 -c クライアント数 同時実行クライアント数を指定します。省略時は 1 となります。pgbench は同時実行クライアント毎に ファイルディスクリプタを使用するので、使用可能 ファイルディスクリプタ数を越えるクライアント数は 指定できません。使用可能ファイルディスクリプタ数 は limit や ulimit コマンドで知ることができます。 -t トランザクション数 各クライアントが実行するトランザクション数を 指定します。省略時は 10 となります。 -s スケーリングファクター -i オプションと一緒に使用します。 スケーリングファクターは1以上の整数。スケーリングファ クターを変えることにより、テストの対象となるテーブルの 大きさが 10万 x [スケーリングファクター]になります。 デフォルトのスケーリングファクターは 1 です。 -v このオプションを指定すると、ベンチマーク開始前に vacuum と history のクリアを行ないます。-v と -n を省略すると、 最小限の vacuum などを行います。すなわち、history の削除、 と history, branches, history の vacuum を行います。 これは、vacuum の時間を最小限にしながら、パフォーマンスに 影響するゴミ掃除を効果的に行います。通常は -v と -n を 省略することをおすすめします。 -n このオプションを指定すると、ベンチマーク開始前に vacuum と history のクリアを行ないません。 -S TPC-Bのトランザクションではなく、検索のみのトランザクションを 実行します。検索スピードを測定したいときに使います。 -d デバッグオプション。様々な情報が表示されます。 ■データベースの初期化 pgbench でベンチマークテストを実施するためには、あらかじめデータベース を初期化し、テストデータを作る必要があります。 $ pgbench -i [データベース名] これにより以下のテーブルが作られます(スケーリングファクター == 1 の場合)。 *注意* 同じ名前のテーブルがあると削除されてしまうのでご注意下さい!! テーブル名 タプル数 ------------------------- branches 1 tellers 10 accounts 100000 history 0 スケーリングファクターを 10,100,1000 などに変更すると、上記タプル数は それに応じて10倍、100倍、1000倍になります。たとえば、スケーリングファ クターを 10 とすると、 テーブル名 タプル数 ------------------------- branches 10 tellers 100 accounts 1000000 history 0 になります。 ■「トランザクション」の定義 pgbench では、以下のシーケンスを全部完了して1トランザクションと数えて います。 (1) begin; (2) update accounts set abalance = abalance + :delta where aid = :aid; ここで、:deltaは1から1000までの値を取る乱数、:aid は 1から100000まで の値を取る乱数です。以下、乱数の値はそれぞれこのトランザクションの 中では同じ値を使います。 (3) select abalance from accounts where aid = :aid; ここでは1件だけ検索されます。 (4) update tellers set tbalance = tbalance + :delta where tid = :tid; ここで :tid は 1から10の間の値をとる乱数です。 (5) update branches set bbalance = bbalance + :delta where bid = :bid; ここで :bid は 1 から[スケリングファクター]の間の値を取る乱数です。 (6) insert into history(tid,bid,aid,delta) values(:tid,:bid,:aid,:delta); (7) end; ■作者とライセンス条件 pgbench は石井 達夫によって書かれました。ライセンス条件は pgbench.c の 冒頭に書いてあります。この条件を守る限り無償で利用し、また自由に再配付 できます。 ■改定履歴 2000/1/15 pgbench-1.2 は PostgreSQL に contribute されました。 * -v オプション追加 1999/09/29 pgbench-1.1 リリース * 谷田さんによるcygwin対応パッチ取り込み * バックエンドクラッシュ時の対応 * -S オプション追加 1999/09/04 pgbench-1.0 リリース