$Id: README,v 1.2 2005/08/02 01:24:53 tom-sato Exp $

$B"#(B pgcbench $B$H$O(B

pgcbench $B$O(B PGCluster $B$N%Y%s%A%^!<%/%F%9%H$r9T$&%W%m%0%i%`$G$9!#$b$A$m(B
$B$s!"(BPGCluster $B$@$1$G$O$J$/(B PostgreSQL $B$N%Y%s%A%^!<%/$r<B;\$9$k$3$H$b$G(B
$B$-$^$9!#(B

pgcbench $B$O(B SELECT$B!"(BUPDATE$B!"(BINSERT $B$r4^$`%H%i%s%6%/%7%g%s$r<B9T$7!"A4(B
$BBN$N<B9T;~4V$H<B:]$K40N;$7$?$G$"$m$&%H%i%s%6%/%7%g%s$N?t$+$i(B 1 $BIC4V$K(B
$B<B9T$G$-$?%H%i%s%6%/%7%g%s?t(B (tps) $B$rI=<($7$^$9!#=hM}$NBP>]$H$J$k%F!<(B
$B%V%k$O%G%U%)%k%H$G$O(B 10 $BK|9T$N%G!<%?$r4^$_$^$9!#(B

$B<B:]$KI=<($O0J2<$N$h$&$K$J$j$^$9!#(B

   number of clients: 4
   number of transactions actually processed: 100
   run time (sec) = 4.416423 
   tps = 22.642759 (including connections establishing)

$B"((B $BCm0U(B

   pgcbench $B$G$O!"%H%i%s%6%/%7%g%s$,<B:]$K40N;$7$?$+$I$&$+$K4X78$J$/!"(B
   $B:G=i$K;XDj$5$l$?%H%i%s%6%/%7%g%s$N?t$r$b$H$K(B tps $B$r5a$a$F$$$k$?$a!"(B
   $B%Y%s%A%^!<%/$,ESCf$G=*N;$7$F$7$^$C$?>l9g!"I=<($5$l$k(B tps $B$,?.MQ$G$-(B
   $B$J$$2DG=@-$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B

$B$J$*!"(Bpgcbench $B$O(B pgbench $B$H$$$&(B PostgreSQL $BMQ$K=q$+$l$?%Y%s%A%^!<%/%F(B
$B%9%H$r9T$J$&%W%m%0%i%`$r$b$H$K:n@.$5$l$^$7$?!#(B


$B"#(B pgbench $B$H$N0c$$(B

$B!&(B $B%^%k%A%f!<%64D6-$N<B8=J}K!(B

   pgbench $B$,(B libpq $B$NHsF14|=hM}5!G=$r;H$C$?%7%s%0%k%W%m%;%9$K$h$C$F%7(B
   $B%_%e%l!<%H$7$F$$$k$N$KBP$7$F!"(Bpgcbench $B$G$O(B fork $B$r;H$C$?%^%k%A%W%m(B
   $B%;%9$K$h$C$F<B8=$7$F$$$^$9!#$3$l$O!"%7%s%0%k%W%m%;%9$G$O%m%C%/$,H/(B
   $B@8$9$k$H!"(BPGCluster $B$,;_$^$C$F$7$^$&$3$H$rHr$1$k$?$a$G$9!#(B

$B!&(B $B%*%W%7%g%s$NJQ99(B

   pgcbench $B$K$O!"(BPGCluster $B$N%Y%s%A%^!<%/%F%9%H$r9T$J$&$N$KJXMx$J!"%H(B
   $B%i%s%6%/%7%g%s$NFbMF$r;XDj$9$k%*%W%7%g%s$,!"$$$/$D$+DI2C$5$l$F$$$^(B
   $B$9!%(B


$B"#(B pgcbench $B$N%$%s%9%H!<%k(B

1. PGCluster $B$r(B configure$B!"(Bmake $B$7$^$9!#(B

   pgcbench $B$N%$%s%9%H!<%k$@$1$,L\E*$G$"$l$P!"(BPGCluster $B$N$9$Y$F$r%3%s(B
   $B%Q%$%k$9$kI,MW$O$"$j$^$;$s!#(BPGCluster $B%=!<%9$N%H%C%W%G%#%l%/%H%j$G(B 
   configure $B$r$7$?8e!"(Bsrc/interface/libpq $B$G(B make all $B$r<B9T$9$l$P=`(B
   $BHw40N;$G$9!#(B

2. $B$3$N%G%#%l%/%H%j(B (src/pgcluster/tool) $B$G(B make $B$r<B9T$7$^$9!#(B

   $B$=$&$9$k$H!"(Bpgcbench $B$H$$$&<B9T%W%m%0%i%`$,$G$-$^$9!#$=$N$^$^<B9T$7(B
   $B$F$b9=$$$^$;$s$7!"(Bmake install $B$r<B9T$7$F(B PGCluster $B$NI8=`<B9T%W%m(B
   $B%0%i%`%G%#%l%/%H%j(B ($B%G%U%)%k%H$G$O(B /usr/local/pgsql/bin) $B$K%$%s%9%H!<(B
   $B%k$9$k$3$H$b$G$-$^$9!#(B


$B"#(B pgcbench $B$N;H$$J}(B

   pgcbench [$B%*%W%7%g%s(B] [$B%G!<%?%Y!<%9L>(B]

$B%G!<%?%Y!<%9L>$r>JN,$9$k$H!"%m%0%$%sL>$HF1$8%G!<%?%Y!<%9L>$r;XDj$7$?$b(B
$B$N$H8+$J$7$^$9!#$J$*!"(Bpgcbench $B$G%G%U%)%k%H$N%Y%s%A%^!<%/$r<B;\$9$k$?(B
$B$a$K$O!"8e=R$N(B -i $B%*%W%7%g%s$r;HMQ$7$F%G!<%?%Y!<%9$r$"$i$+$8$a=i4|2=$7(B
$B$F$*$/I,MW$,$"$j$^$9!#(B

pgcbench $B$K$O$$$m$$$m$J%*%W%7%g%s$,$"$j$^$9!#(B

-h $B%[%9%HL>(B

   PostgreSQL$B$N(B $B%G!<%?%Y!<%9%G!<%b%s(B postmaster $B$NF0:n$7$F$$$k%[%9%HL>(B
   $B$r;XDj$7$^$9!#>JN,$9$k$H4D6-JQ?t(B PGHOST $B$K@_Dj$7$?%[%9%HL>$,;XDj$5(B
   $B$l$^$9!#(BPGHOST $B$b;XDj$5$l$F$$$J$$$H<+%[%9%H$K(B Unix $B%I%a%$%s%=%1%C%H(B
   $B$G@\B3$7$^$9!#(B

-p $B%]!<%HHV9f(B

   postmaster $B$N;HMQ$9$k%]!<%HHV9f$r;XDj$7$^$9!#>JN,$9$k$H4D6-JQ?t(B
   PGPORT $B$K@_Dj$7$?%]!<%HHV9f$,;XDj$5$l$^$9!#(BPGPORT $B$b;XDj$5$l$F$$$J(B
   $B$$$H(B 5432 $B$,;XDj$5$l$?$b$N$H8+$J$7$^$9!#(B

-c $B%/%i%$%"%s%H?t(B

   $BF1;~<B9T%/%i%$%"%s%H?t$r;XDj$7$^$9!#>JN,;~$O(B 1 $B$H$J$j$^$9!#(Bpgcbench 
   $B$OF1;~<B9T%/%i%$%"%s%H$4$H$K%U%!%$%k%G%#%9%/%j%W%?$r;HMQ$9$k$N$G!"(B
   $B;HMQ2DG=%U%!%$%k%G%#%9%/%j%W%??t$r1[$($k%/%i%$%"%s%H?t$O;XDj$G$-$^(B
   $B$;$s!#;HMQ2DG=%U%!%$%k%G%#%9%/%j%W%??t$O(B limit $B$d(B ulimit $B%3%^%s%I$G(B
   $B3NG'$9$k$3$H$,$G$-$^$9!#(B

-t $B%H%i%s%6%/%7%g%s?t(B

   $B%H%i%s%6%/%7%g%s?t$r;XDj$7$^$9!#3F%/%i%$%"%s%H$,<B9T$9$k%H%i%s%6%/(B
   $B%7%g%s?t$O$3$l$r%/%i%$%"%s%H?t$G3d$C$??t$H$J$j$^$9!#>JN,;~$O(B 10 $B$H(B
   $B$J$j$^$9!#(B

-s $B%9%1!<%j%s%0%U%!%/%?!<(B

   -i $B%*%W%7%g%s$H$H$b$K;HMQ$7$^$9!#%9%1!<%j%s%0%U%!%/%?!<$O(B 1 $B0J>e$N(B
   $B@0?t$G$9!#%9%1!<%j%s%0%U%!%/%?!<$rJQ$($k$3$H$K$h$j!"%F%9%H$NBP>]$H(B
   $B$J$k%F!<%V%k$NBg$-$5$,(B 10 $BK|(B $B!_(B $B%9%1!<%j%s%0%U%!%/%?!<$K$J$j$^$9!#(B
   $B%G%U%)%k%H$N%9%1!<%j%s%0%U%!%/%?!<$O(B 1 $B$G$9!#(B

-u $B%m%0%$%sL>(B

   DB $B%f!<%6$N%m%0%$%sL>$r;XDj$7$^$9!#>JN,$9$k$H4D6-JQ?t(B PGUSER $B$K@_Dj(B
   $B$7$?%m%0%$%sL>$,;XDj$5$l$^$9!#(B

-P $B%Q%9%o!<%I(B

   $B%Q%9%o!<%I$r;XDj$7$^$9!#$J$*!"$3$N%*%W%7%g%s$r;H$&$H!"%Q%9%o!<%I$r(B
   ps $B%3%^%s%I$G8+$i$l$k$J$I!"%;%-%e%j%F%#%[!<%k$K$J$k2DG=@-$,$"$k$N$G!"(B
   $B%F%9%HMQ$K$N$_$*;H$$2<$5$$!#(B

-n

   $B$3$N%*%W%7%g%s$r;XDj$9$k$H!"%Y%s%A%^!<%/3+;OA0$K(B VACUUM $B$H(B history
   $B%F!<%V%k$N%/%j%"$r<B9T$7$^$;$s!#(B

-v

   $B$3$N%*%W%7%g%s$r;XDj$9$k$H!"%Y%s%A%^!<%/3+;OA0$K(B VACUUM $B$H(B history
   $B%F!<%V%k$N%/%j%"$r<B9T$7$^$9!#(B-v $B$H(B -n $B$r>JN,$9$k$H!":G>.8B$N(B
   VACUUM $B$J$I$r<B9T$7$^$9!#$9$J$o$A!"(Bhistory $B%F!<%V%k$N%/%j%"$H!"(B
   branches$B!"(Btellers$B!"(Bhistory $B%F!<%V%k$N(B VACUUM $B$r<B9T$7$^$9!#$3$l$O!"(B
   VACUUM $B$N;~4V$r:G>.8B$K$7$J$,$i!"%Q%U%)!<%^%s%9$K1F6A$9$k%4%_A]=|$r(B
   $B8z2LE*$K<B9T$7$^$9!#DL>o$O(B -v $B$H(B -n $B$r>JN,$9$k$3$H$r?d>)$7$^$9!#(B

-I

   $BA^F~$N$_$N%H%i%s%6%/%7%g%s$r<B9T$7$^$9!#A^F~%9%T!<%I$rB,Dj$7$?$$$H(B
   $B$-$K;H$$$^$9!#(B

-U

   $B99?7$N$_$N%H%i%s%6%/%7%g%s$r<B9T$7$^$9!#99?7%9%T!<%I$rB,Dj$7$?$$$H(B
   $B$-$K;H$$$^$9!#(B

-S

   $B8!:w$N$_$N%H%i%s%6%/%7%g%s$r<B9T$7$^$9!#8!:w%9%T!<%I$rB,Dj$7$?$$$H(B
   $B$-$K;H$$$^$9!#(B

-f $B%U%!%$%kL>(B

   $B%H%i%s%6%/%7%g%s$NFbMF$,5-=R$5$l$?%U%!%$%kL>$r;XDj$7$^$9!#$3$N%*%W(B
   $B%7%g%s$r;XDj$9$k$H!"%U%!%$%k$K5-=R$5$l$?FbMF$N%H%i%s%6%/%7%g%s$r<B(B
   $B9T$7$^$9!#%Y%s%A%^!<%/$G;HMQ$9$k%F!<%V%k$O$"$i$+$8$a=i4|2=$7$F$*$/(B
   $BI,MW$,$"$j$^$9!#F~NO%U%!%$%k$N%U%)!<%^%C%H$O8e=R$7$^$9!#(B

-T

   BEGIN $B$H(B END $B$G0O$^$l$?%H%i%s%6%/%7%g%s%V%m%C%/Fb$G%H%i%s%6%/%7%g%s(B
   $B$r<B9T$7$^$9!#(B

-C

   $B$3$N%*%W%7%g%s$r;XDj$9$k$H!":G=i$K3NN)$7$?%3%M%/%7%g%s$r;H$$2s$9$N(B
   $B$G$O$J$/!"3F%H%i%s%6%/%7%g%s$4$H$K(B DB $B$X$N@\B3$r9T$$$^$9!#%3%M%/%7%g(B
   $B%s$N%*!<%P!<$X%C%I$rB,Dj$9$k$N$KM-8z$G$9!#(B

-l

   $B8D!9$N%H%i%s%6%/%7%g%s$N<B9T;~4V$r5-O?$7$^$9!#5-O?@h$O%+%l%s%H%G%#(B
   $B%l%/%H%j0J2<$N(B pgbench_log.xxx $B$H$$$&%U%!%$%k$G$9!#%U%!%$%k$N%U%)!<(B
   $B%^%C%H$O0J2<$N$h$&$K$J$j$^$9!#;~4V$O%^%$%/%mICC10L$G$9!#(B

      <$B%/%i%$%"%s%H(B ID> <$B%H%i%s%6%/%7%g%sHV9f(B> <$B;~4V(B>

-d

   $B%G%P%C%0%*%W%7%g%s!#MM!9$J>pJs$,I=<($5$l$^$9!#(B


$B"#(B $B%G!<%?%Y!<%9$N=i4|2=(B

pgcbench $B$G%G%U%)%k%H$N%Y%s%A%^!<%/%F%9%H$r<B;\$9$k$?$a$K$O!"$"$i$+$8(B
$B$a%G!<%?%Y!<%9$r=i4|2=$7!"%F%9%H%G!<%?$r:n$kI,MW$,$"$j$^$9!#(B

   pgcbench -i [$B%G!<%?%Y!<%9L>(B]

$B$3$l$K$h$j0J2<$N%F!<%V%k$,:n@.$5$l$^$9(B ($B%9%1!<%j%s%0%U%!%/%?!<$,(B 1 $B$N(B
$B>l9g(B)$B!#(B

    $B%F!<%V%kL>(B |  $B9T?t(B
   ------------+--------
    branches   |      1
    tellers    |     10
    accounts   | 100000
    history    |      0

$B"((B $BCm0U(B

   $BF1$8L>A0$N%F!<%V%k$,$"$k$H:o=|$5$l$F$7$^$&$N$G$4Cm0U2<$5$$!#(B

$B%9%1!<%j%s%0%U%!%/%?!<$r(B 10$B!"(B100$B!"(B1000 $B$J$I$KJQ99$9$k$H!">e5-9T?t$O$=(B
$B$l$K1~$8$F(B 10 $BG\!"(B100 $BG\!"(B1000 $BG\$K$J$j$^$9!#Nc$($P!"%9%1!<%j%s%0%U%!(B
$B%/%?!<$r(B 100 $B$H$9$k$H0J2<$N$h$&$K$J$j$^$9!#(B

    $B%F!<%V%kL>(B |   $B9T?t(B
   ------------+----------
    branches   |      100
    tellers    |     1000
    accounts   | 10000000
    history    |        0


$B"#(B $BF~NO%U%!%$%k$N%U%)!<%^%C%H(B

pgcbench $B$G$O!"(B-f $B%*%W%7%g%s$r;XDj$7$F%H%i%s%6%/%7%g%s$K4^$^$l$k(B SQL 
$B%3%^%s%I$NFbMF$r5-=R$7$?%U%!%$%k$rFI$_9~$`$3$H$,$G$-$^$9!#F~NO%U%!%$%k(B
$B$K$O(B 1 $B9T$K$D$-(B 1 $B$D$N%3%^%s%I$r5-=R$7$^$9!#6u9T$OL5;k$5$l!"Fs=E%O%$%U(B
$B%s$G;O$^$k9T$O%3%a%s%H$r0UL#$7$^$9!#(B

$B%3%^%s%I$K$O!"(BSQL $B%3%^%s%I$K2C$(!"%P%C%/%9%i%C%7%e$G;O$^$k%a%?%3%^%s%I(B
$B$r5-=R$9$k$3$H$,$G$-$^$9!#%a%?%3%^%s%I$O(B pgcbench $B<+?H$K$h$C$F<B9T$5$l(B
$B$^$9!#%a%?%3%^%s%I$N7A<0$O%P%C%/%9%i%C%7%e!"$=$ND>8e$K%3%^%s%I$NF0;l!"(B
$B$=$N<!$K0z?t$,B3$-$^$9!#F0;l%3%^%s%I$H0z?t!"$^$?$=$l$>$l$N0z?t$O6uGrJ8(B
$B;z$K$h$C$F6hJL$5$l$^$9!#(B

$B:#$N$H$3$m!"0J2<$N%a%?%3%^%s%I$,Dj5A$5$l$F$$$^$9!#(B

\setrandom name min max

   $B:G>.CM(B min $B$H:GBgCM(B max $B$N4V$NCM$r<h$kMp?t$r!"(Bname $BJQ?t$K@_Dj$7$^$9!#(B

$BJQ?t$KMp?t$r@_Dj$9$k$K$O!"(B\setrandom $B%a%?%3%^%s%I$r;HMQ$7$F0J2<$N$h$&(B
$B$K5-=R$7$^$9!#(B

   \setrandom aid 1 100000

$B$3$l$O!"JQ?t(B aid $B$K(B 1 $B$+$i(B 100000 $B$N4V$NMp?t$r@_Dj$7$^$9!#$^$?!"JQ?t$N(B
$BCM$r(B SQL $B%3%^%s%I$KKd$a9~$`$K$O!"0J2<$N$h$&$K$=$NL>A0$NA0$K%3%m%s$rIU(B
$B$1$^$9!#(B

  SELECT abalance FROM accounts WHERE aid = :aid

$BNc$($P!"(BTPC-B $B$K;w$?%Y%s%A%^!<%/$r9T$&$K$O!"0J2<$N$h$&$K%H%i%s%6%/%7%g(B
$B%s$NFbMF$r%U%!%$%k$K5-=R$7!"(B-f $B%*%W%7%g%s$K$h$C$F$=$N%U%!%$%k$r;XDj$7(B
$B$F(B pgcbench $B$r<B9T$7$^$9!#(B

   \setrandom aid 1 100000
   \setrandom bid 1 1
   \setrandom tid 1 10
   \setrandom delta 1 1000
   BEGIN
   UPDATE accounts SET abalance = abalance + :delta WHERE aid = :aid
   SELECT abalance FROM accounts WHERE aid = :aid
   UPDATE tellers SET tbalance = tbalance + :delta WHERE tid = :tid
   UPDATE branches SET bbalance = bbalance + :delta WHERE bid = :bid
   INSERT INTO history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, 'now')

$B$J$*!"$3$NNc$G$O!"(B-i $B%*%W%7%g%s$r;H$C$F=i4|2=$7$?%G!<%?%Y!<%9(B ($B%9%1!<(B
$B%j%s%0%U%!%/%?!<$,(B 1 $B$N>l9g(B) $B$KBP$7$F%Y%s%A%^!<%/$r9T$&$3$H$r2>Dj$7$F(B
$B$$$^$9!#(B


$B"#(B $B%H%i%s%6%/%7%g%s$NDj5A(B

pgcbench $B$N%G%U%)%k%H$N%Y%s%A%^!<%/$G$O!"0J2<$N(B SQL $B%3%^%s%I$rA4It40N;(B
$B$7$F(B 1 $B%H%i%s%6%/%7%g%s$H?t$($F$$$^$9!#(B

1. SELECT abalance FROM accounts WHERE aid = :aid

   :aid $B$O(B 1 $B$+$i%9%1!<%j%s%0%U%!%/%?!<(B $B!_(B 10 $BK|$^$G$NCM$r<h$kMp?t$G$9!#(B
   $B$3$3$G$O(B 1 $B7o$@$18!:w$5$l$^$9!#0J2<!"Mp?t$NCM$O$=$l$>$l$3$N%H%i%s%6(B
   $B%/%7%g%s$NCf$G$OF1$8CM$r;H$$$^$9!#(B

2. UPDATE accounts SET abalance = abalance + :delta WHERE aid = :aid

   :delta $B$O(B 1 $B$+$i(B 1000 $B$^$G$NCM$r<h$kMp?t$G$9!#(B

3. SELECT abalance FROM accounts WHERE aid = :aid

4. INSERT INTO history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, 'now')

   :tid $B$O(B 1 $B$+$i%9%1!<%j%s%0%U%!%/%?!<(B $B!_(B 10 $B$^$G$NCM$r<h$kMp?t!"(B:bid
   $B$O(B 1 $B$+$i%9%1!<%j%s%0%U%!%/%?!<$^$G$NCM$r<h$kMp?t$G$9!#(B

5. INSERT INTO history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, 'now')

6. INSERT INTO history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, 'now')

7. SELECT abalance FROM accounts WHERE aid = :aid

-T $B%*%W%7%g%s$r;XDj$7$F%H%i%s%6%/%7%g%s%V%m%C%/Fb$G%H%i%s%6%/%7%g%s$r(B
$B<B9T$9$k>l9g!"(B1 $B$r(B BEGIN$B$K!"(B7 $B$r(B END $B$KCV$-49$($?(B SQL $B%3%^%s%I$,<B9T$5(B
$B$l$^$9!#$^$?!"%H%i%s%6%/%7%g%s$H$7$F<B9T$5$l$k(B SQL $B%3%^%s%I$O!"(B-I $B%*%W(B
$B%7%g%s(B ($BA^F~$N$_(B) $B$G$"$l$P(B 4$B!"(B-U ($B99?7$N$_(B) $B$G$"$l$P(B 2$B!"(B-S ($B8!:w$N$_(B)
$B$G$"$l$P(B 1 $B$H$J$j$^$9!#(B
