Commit 3da0dfb4 authored by Tatsuo Ishii's avatar Tatsuo Ishii

Multi-threaded version of pgbench contributed by ITAGAKI Takahiro,

reviewed by Greg Smith and Josh Williams.

Following is the proposal from ITAGAKI Takahiro:

Pgbench is a famous tool to measure postgres performance, but nowadays
it does not work well because it cannot use multiple CPUs. On the other
hand, postgres server can use CPUs very well, so the bottle-neck of
workload is *in pgbench*.

Multi-threading would be a solution. The attached patch adds -j
(number of jobs) option to pgbench. If the value N is greater than 1,
pgbench runs with N threads. Connections are equally-divided into
them (ex. -c64 -j4 => 4 threads with 16 connections each). It can
run on POSIX platforms with pthread and on Windows with win32 threads.

Here are results of multi-threaded pgbench runs on Fedora 11 with intel
core i7 (8 logical cores = 4 physical cores * HT). -j8 (8 threads) was
the best and the tps is 4.5 times of -j1, that is a traditional result.

$ pgbench -i -s10
$ pgbench -n -S -c64 -j1   =>  tps = 11600.158593
$ pgbench -n -S -c64 -j2   =>  tps = 17947.100954
$ pgbench -n -S -c64 -j4   =>  tps = 26571.124001
$ pgbench -n -S -c64 -j8   =>  tps = 52725.470403
$ pgbench -n -S -c64 -j16  =>  tps = 38976.675319
$ pgbench -n -S -c64 -j32  =>  tps = 28998.499601
$ pgbench -n -S -c64 -j64  =>  tps = 26701.877815

Is it acceptable to use pthread in contrib module?
If ok, I will add the patch to the next commitfest.
parent 90725929
This diff is collapsed.
<!-- $PostgreSQL: pgsql/doc/src/sgml/pgbench.sgml,v 1.8 2009/05/07 22:01:18 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/pgbench.sgml,v 1.9 2009/08/03 15:18:14 ishii Exp $ -->
<sect1 id="pgbench"> <sect1 id="pgbench">
<title>pgbench</title> <title>pgbench</title>
...@@ -171,6 +171,14 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</> ...@@ -171,6 +171,14 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
sessions. Default is 1. sessions. Default is 1.
</entry> </entry>
</row> </row>
<row>
<entry><literal>-j</literal> <replaceable>threads</></entry>
<entry>
Number of worker threads. Clients are equally-divided into those
threads and executed in it. The number of clients must be a multiple
number of threads. Default is 1.
</entry>
</row>
<row> <row>
<entry><literal>-t</literal> <replaceable>transactions</></entry> <entry><literal>-t</literal> <replaceable>transactions</></entry>
<entry> <entry>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment