On 19.12.2012 06:30, Jeevan Chalke wrote:
> 
> 
> 
> On Mon, Dec 17, 2012 at 5:37 AM, Tomas Vondra <t...@fuzzy.cz
> <mailto:t...@fuzzy.cz>> wrote:
> 
>     Hi,
> 
>     attached is a new version of the patch that
> 
>     (a) converts the 'log_step_seconds' variable to a constant (and does
>         not allow changing it using a command-line option etc.)
> 
>     (b) keeps the current logging as a default
> 
>     (c) adds a "-q" switch that enables the new logging with a 5-second
>         interval
> 
>     I'm still not convinced there should be yet another know for tuning the
>     log interval - opinions?
> 
> 
> It seems that you have generated a patch over your earlier version and
> due to that it is not cleanly applying on fresh sources.
> Please generate patch on fresh sources.

Seems you're right - I've attached the proper patch against current master.

> However, I absolutely no issues with the design. Also code review is
> already done and looks good to me.
> I think to move forward on this we need someone from core-team. So I am
> planning to change its status to "ready-for-committor".
> 
> Before that please provide updated patch for final code review.

thanks
Tomas
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index e376452..f3953a7 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -39,6 +39,7 @@
 #include "portability/instr_time.h"
 
 #include <ctype.h>
+#include <math.h>
 
 #ifndef WIN32
 #include <sys/time.h>
@@ -102,6 +103,7 @@ extern int  optind;
 #define MAXCLIENTS     1024
 #endif
 
+#define LOG_STEP_SECONDS       5       /* seconds between log messages */
 #define DEFAULT_NXACTS 10              /* default nxacts */
 
 int                    nxacts = 0;                     /* number of 
transactions per client */
@@ -150,6 +152,7 @@ char           *index_tablespace = NULL;
 #define naccounts      100000
 
 bool           use_log;                        /* log transaction latencies to 
a file */
+bool           use_quiet;                      /* quiet logging onto stderr */
 bool           is_connect;                     /* establish connection for 
each transaction */
 bool           is_latencies;           /* report per-command latencies */
 int                    main_pid;                       /* main process id used 
in log filename */
@@ -389,6 +392,7 @@ usage(void)
                   "  -v           vacuum all four standard tables before 
tests\n"
                   "\nCommon options:\n"
                   "  -d             print debugging output\n"
+                  "  -q             quiet logging (a message each 5 seconds)\n"
                   "  -h HOSTNAME    database server host or socket directory\n"
                   "  -p PORT        database server port number\n"
                   "  -U USERNAME    connect as specified database user\n"
@@ -1362,6 +1366,11 @@ init(bool is_no_vacuum)
        char            sql[256];
        int                     i;
 
+       /* used to track elapsed time and estimate of the remaining time */
+       instr_time      start, diff;
+       double          elapsed_sec, remaining_sec;
+       int                     log_interval = 1;
+
        if ((con = doConnect()) == NULL)
                exit(1);
 
@@ -1430,6 +1439,8 @@ init(bool is_no_vacuum)
        }
        PQclear(res);
 
+       INSTR_TIME_SET_CURRENT(start);
+
        for (i = 0; i < naccounts * scale; i++)
        {
                int                     j = i + 1;
@@ -1441,10 +1452,33 @@ init(bool is_no_vacuum)
                        exit(1);
                }
 
-               if (j % 100000 == 0)
+               /* If we want to stick with the original logging, print a 
message each
+                * 100k inserted rows. */
+               if ((! use_quiet) && (j % 100000 == 0))
                        fprintf(stderr, "%d of %d tuples (%d%%) done.\n",
-                                       j, naccounts * scale,
-                                       (int) (((int64) j * 100) / (naccounts * 
scale)));
+                                                       j, naccounts * scale,
+                                                       (int) (((int64) j * 
100) / (naccounts * scale)));
+               /* let's not call the timing for each row, but only each 100 
rows */
+               else if (use_quiet && (j % 100 == 0))
+               {
+                       INSTR_TIME_SET_CURRENT(diff);
+                       INSTR_TIME_SUBTRACT(diff, start);
+
+                       elapsed_sec = INSTR_TIME_GET_DOUBLE(diff);
+                       remaining_sec = (scale * naccounts - j) * elapsed_sec / 
j;
+
+                       /* have we reached the next interval (or end)? */
+                       if ((j == scale * naccounts) || (elapsed_sec >= 
log_interval * LOG_STEP_SECONDS)) {
+
+                               fprintf(stderr, "%d of %d tuples (%d%%) done 
(elapsed %.2f s, remaining %.2f s).\n",
+                                               j, naccounts * scale,
+                                               (int) (((int64) j * 100) / 
(naccounts * scale)), elapsed_sec, remaining_sec);
+
+                               /* skip to the next interval */
+                               log_interval = 
(int)ceil(elapsed_sec/LOG_STEP_SECONDS);
+                       }
+               }
+
        }
        if (PQputline(con, "\\.\n"))
        {
@@ -1987,7 +2021,7 @@ main(int argc, char **argv)
        state = (CState *) pg_malloc(sizeof(CState));
        memset(state, 0, sizeof(CState));
 
-       while ((c = getopt_long(argc, argv, 
"ih:nvp:dSNc:j:Crs:t:T:U:lf:D:F:M:", long_options, &optindex)) != -1)
+       while ((c = getopt_long(argc, argv, 
"ih:nvp:dqSNc:j:Crs:t:T:U:lf:D:F:M:", long_options, &optindex)) != -1)
        {
                switch (c)
                {
@@ -2095,6 +2129,9 @@ main(int argc, char **argv)
                        case 'l':
                                use_log = true;
                                break;
+                       case 'q':
+                               use_quiet = true;
+                               break;
                        case 'f':
                                ttype = 3;
                                filename = pg_strdup(optarg);
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to