OSDN Git Service

Add -N option which disables updation of branches and tellers tables.
authorTatsuo Ishii <ishii@postgresql.org>
Sun, 24 Feb 2002 00:17:57 +0000 (00:17 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Sun, 24 Feb 2002 00:17:57 +0000 (00:17 +0000)
So there would be less contention with -N, that might be more realistic
test.

contrib/pgbench/README.pgbench
contrib/pgbench/README.pgbench_jis
contrib/pgbench/pgbench.c

index d052411..6f1de39 100644 (file)
@@ -1,4 +1,4 @@
-pgbench README         2001/10/24 Tatsuo Ishii (t-ishii@sra.co.jp)
+pgbench README         2002/02/24 Tatsuo Ishii (t-ishii@sra.co.jp)
 
 o What is pgbench?
 
@@ -122,6 +122,9 @@ o options
        -S
                Perform select only transactions instead of TPC-B.
 
+       -N
+               Skip updation of "branches" and "tellers" table. This
+               would result in lower contention of updates.
         -C
                Establish connection for each transaction, rather than
                doing it just once at begining of pgbench in the normal
@@ -153,6 +156,10 @@ Basically it is same as BSD license. See pgbench.c for more details.
 
 o History
 
+2002/02/24
+       * disable CHECKPOINT
+       * add -N option
+
 2001/10/24
        * "time"->"mtime"
 
index b87d3e6..e1aec73 100644 (file)
@@ -1,4 +1,4 @@
-pgbench README         2001/09/09 Tatsuo Ishii (t-ishii@sra.co.jp)
+pgbench README         2002/02/24 Tatsuo Ishii (t-ishii@sra.co.jp)
 
 \e$B"#\e(Bpgbench \e$B$H$O!)\e(B
 
@@ -97,6 +97,13 @@ pgbench \e$B$K$O$$$m$$$m$J%*%W%7%g%s$,$"$j$^$9!%\e(B
 -S             TPC-B\e$B$N%H%i%s%6%/%7%g%s$G$O$J$/!$8!:w$N$_$N%H%i%s%6%/%7%g%s$r\e(B
                \e$B<B9T$7$^$9!%8!:w%9%T!<%I$rB,Dj$7$?$$$H$-$K;H$$$^$9!%\e(B
 
+-N
+               "branches"\e$B$H\e(B"tellers"\e$B%F!<%V%k$N99?7$r9T$$$^$;$s!%$3$l\e(B
+               \e$B$K$h$C$F\e(B"branches"\e$B$H\e(B"tellers"\e$B$X$NBgNL$N99?7$N6%9g$N$J\e(B
+               \e$B$$>uBV$G$NB,Dj$r9T$$$^$9!%$7$?$,$C$F\e(BTPC-B\e$B$N%9%Z%C%/$K\e(B
+               \e$B$OE,9g$7$J$/$J$j$^$9$,!$$h$j8=<BE*$JIi2Y$r%F%9%H$9$k$3\e(B
+               \e$B$H$,$G$-$^$9!%\e(B
+
 -C             \e$B$3$N%*%W%7%g%s$r;XDj$9$k$H!$:G=i$K3NN)$7$?%3%M%/%7%g%s\e(B
                \e$B$r;H$$2s$9$N$G$O$J$/!$3F%H%i%s%6%/%7%g%s$4$H$K\e(BDB\e$B$X$N@\\e(B
                \e$BB3$r9T$$$^$9!%%3%M%/%7%g%s$N%*!<%P!<$X%C%I$rB,Dj$9$k$N\e(B
@@ -169,6 +176,11 @@ pgbench \e$B$O@P0f\e(B \e$BC#IW$K$h$C$F=q$+$l$^$7$?!%%i%$%;%s%9>r7o$O\e(B pgbench.c
 
 \e$B"#2~DjMzNr\e(B
 
+2002/02/24
+       * \e$B$3$3$+$i$O\e(B7.3\e$BMQ$NJQ99$G$9!%\e(B
+       * CHECKPOINT\e$B$NH/9T$r$d$a$^$7$?!%\e(B
+       * -N \e$B%*%W%7%g%s$rDI2C$7$^$7$?!%\e(B
+
 2001/10/24
        * PostgreSQL 7.2\e$B$G!$\e(B"time"\e$B$,M=Ls8l$K$J$C$?$N$G!$\e(B"mtime"\e$B$KJQ99\e(B
        \e$B$7$?!%\e(B
index 240340b..bcac18b 100644 (file)
@@ -1,10 +1,10 @@
 /*
- * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.15 2002/02/18 05:46:41 momjian Exp $
+ * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.16 2002/02/24 00:17:57 ishii Exp $
  *
  * pgbench: a simple TPC-B like benchmark program for PostgreSQL
  * written by Tatsuo Ishii
  *
- * Copyright (c) 2000  Tatsuo Ishii
+ * Copyright (c) 2000-2002  Tatsuo Ishii
  *
  * Permission to use, copy, modify, and distribute this software and
  * its documentation for any purpose and without fee is hereby
@@ -95,7 +95,7 @@ typedef struct
 static void
 usage()
 {
-       fprintf(stderr, "usage: pgbench [-h hostname][-p port][-c nclients][-t ntransactions][-s scaling_factor][-n][-C][-v][-S][-U login][-P password][-d][dbname]\n");
+       fprintf(stderr, "usage: pgbench [-h hostname][-p port][-c nclients][-t ntransactions][-s scaling_factor][-n][-C][-v][-S][-N][-U login][-P password][-d][dbname]\n");
        fprintf(stderr, "(initialize mode): pgbench -i [-h hostname][-p port][-s scaling_factor][-U login][-P password][-d][dbname]\n");
 }
 
@@ -168,7 +168,7 @@ check(CState * state, PGresult *res, int n, int good)
 
 /* process a transaction */
 static void
-doOne(CState * state, int n, int debug)
+doOne(CState * state, int n, int debug, int ttype)
 {
        char            sql[256];
        PGresult   *res;
@@ -295,12 +295,18 @@ doOne(CState * state, int n, int debug)
                        sprintf(sql, "select abalance from accounts where aid = %d", st->aid);
                        break;
                case 3:
-                       sprintf(sql, "update tellers set tbalance = tbalance + %d where tid = %d\n",
-                                       st->delta, st->tid);
-                       break;
+                       if (ttype == 0)
+                       {
+                           sprintf(sql, "update tellers set tbalance = tbalance + %d where tid = %d\n",
+                                   st->delta, st->tid);
+                           break;
+                       }
                case 4:
-                       sprintf(sql, "update branches set bbalance = bbalance + %d where bid = %d", st->delta, st->bid);
-                       break;
+                       if (ttype == 0)
+                       {
+                           sprintf(sql, "update branches set bbalance = bbalance + %d where bid = %d", st->delta, st->bid);
+                           break;
+                       }
                case 5:
                        sprintf(sql, "insert into history(tid,bid,aid,delta,mtime) values(%d,%d,%d,%d,'now')",
                                        st->tid, st->bid, st->aid, st->delta);
@@ -548,6 +554,18 @@ init()
                                fprintf(stderr, "PQendcopy failed\n");
                                exit(1);
                        }
+
+#ifdef NOT_USED
+                       /*
+                        * do a checkpoint to purge the old WAL logs
+                        */
+                       res = PQexec(con, "checkpoint");
+                       if (PQresultStatus(res) != PGRES_COMMAND_OK)
+                       {
+                               fprintf(stderr, "%s", PQerrorMessage(con));
+                               exit(1);
+                       }
+#endif /* NOT_USED */
                }
        }
 
@@ -575,6 +593,7 @@ printResults(
                                t2;
        int                     i;
        int                     normal_xacts = 0;
+       char    *s;
 
        for (i = 0; i < nclients; i++)
                normal_xacts += state[i].cnt;
@@ -585,7 +604,14 @@ printResults(
        t2 = (tv3->tv_sec - tv2->tv_sec) * 1000000.0 + (tv3->tv_usec - tv2->tv_usec);
        t2 = normal_xacts * 1000000.0 / t2;
 
-       printf("transaction type: %s\n", ttype == 0 ? "TPC-B (sort of)" : "SELECT only");
+       if (ttype == 0)
+           s = "TPC-B (sort of)";
+       else if (ttype == 2)
+           s = "Update only accounts";
+       else
+           s = "SELECT only";
+
+       printf("transaction type: %s\n", s);
        printf("scaling factor: %d\n", tps);
        printf("number of clients: %d\n", nclients);
        printf("number of transactions per client: %d\n", nxacts);
@@ -609,7 +635,8 @@ main(int argc, char **argv)
        int                     is_full_vacuum = 0;             /* do full vacuum before testing? */
        int                     debug = 0;              /* debug flag */
        int                     ttype = 0;              /* transaction type. 0: TPC-B, 1: SELECT
-                                                                * only */
+                                                                * only 
+                                2: skip updation of branches and tellers */
 
        static CState state[MAXCLIENTS];        /* clients status */
 
@@ -631,7 +658,7 @@ main(int argc, char **argv)
        PGconn     *con;
        PGresult   *res;
 
-       while ((c = getopt(argc, argv, "ih:nvp:dc:t:s:U:P:CS")) != -1)
+       while ((c = getopt(argc, argv, "ih:nvp:dc:t:s:U:P:CNS")) != -1)
        {
                switch (c)
                {
@@ -656,6 +683,9 @@ main(int argc, char **argv)
                        case 'S':
                                ttype = 1;
                                break;
+                       case 'N':
+                               ttype = 2;
+                               break;
                        case 'c':
                                nclients = atoi(optarg);
                                if (nclients <= 0 || nclients > MAXCLIENTS)
@@ -841,8 +871,8 @@ main(int argc, char **argv)
        /* send start up quries in async manner */
        for (i = 0; i < nclients; i++)
        {
-               if (ttype == 0)
-                       doOne(state, i, debug);
+               if (ttype == 0 || ttype == 2)
+                       doOne(state, i, debug, ttype);
                else if (ttype == 1)
                        doSelectOnly(state, i, debug);
        }
@@ -905,8 +935,8 @@ main(int argc, char **argv)
                {
                        if (state[i].con && FD_ISSET(PQsocket(state[i].con), &input_mask))
                        {
-                               if (ttype == 0)
-                                       doOne(state, i, debug);
+                               if (ttype == 0 || ttype == 2)
+                                       doOne(state, i, debug, ttype);
                                else if (ttype == 1)
                                        doSelectOnly(state, i, debug);
                        }