Add -N option which disables updation of branches and tellers tables.
authorTatsuo Ishii
Sun, 24 Feb 2002 00:17:57 +0000 (00:17 +0000)
committerTatsuo Ishii
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 d052411ab2c5062a8dee51d6a0930592aa8ecff0..6f1de39a557c2eb3deee906709c2b8db32b707cc 100644 (file)
@@ -1,4 +1,4 @@
-pgbench README     2001/10/24 Tatsuo Ishii ([email protected])
+pgbench README     2002/02/24 Tatsuo Ishii ([email protected])
 
 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 b87d3e60df1f4b0c94250fce01408cd5f9f19c89..e1aec730b701f3b3bb05ed7aa0033836021d5a3a 100644 (file)
@@ -1,4 +1,4 @@
-pgbench README     2001/09/09 Tatsuo Ishii ([email protected])
+pgbench README     2002/02/24 Tatsuo Ishii ([email protected])
 
 \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\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=\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 240340bb186474b0dc37beb5653c358c06fae37f..bcac18b236bf71fe3059a845363a26de1356293e 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);
            }