pgbench progress with timestamp
authorTeodor Sigaev <[email protected]>
Wed, 16 Sep 2015 14:24:53 +0000 (17:24 +0300)
committerTeodor Sigaev <[email protected]>
Wed, 16 Sep 2015 14:24:53 +0000 (17:24 +0300)
This patch adds an option to replace the "time since pgbench run
started" with a Unix epoch timestamp in the progress report so that,
for instance, it is easier to compare timelines with pgsql log

Fabien COELHO <[email protected]>

doc/src/sgml/ref/pgbench.sgml
src/bin/pgbench/pgbench.c

index ba3edc46307014f02b0e5cfc33efa6243d1a47af..0ac40f100283d743eb7e11a94f11bce5cbb3287c 100644 (file)
@@ -428,6 +428,19 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>--progress-timestamp</option></term>
+      <listitem>
+       <para>
+        When showing progress (option <option>-P</>), use a timestamp
+        (Unix epoch) instead of the number of seconds since the
+        beginning of the run.  The unit is in seconds, with millisecond
+        precision after the dot.
+        This helps compare logs generated by various tools.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>-r</option></term>
       <term><option>--report-latencies</option></term>
index 4071a4247ba995952cdd269ac06d4947f4a741a1..6ae1b869dd4f9b89374c953704a36647c7bd767e 100644 (file)
@@ -165,6 +165,7 @@ bool                use_quiet;                      /* quiet logging onto stderr */
 int                    agg_interval;           /* log aggregates instead of individual
                                                                 * transactions */
 int                    progress = 0;           /* thread progress report every this seconds */
+bool           progress_timestamp = false; /* progress report with Unix time */
 int                    progress_nclients = 0;          /* number of clients for progress
                                                                                 * report */
 int                    progress_nthreads = 0;          /* number of threads for progress
@@ -388,6 +389,7 @@ usage(void)
                   "  -v, --vacuum-all         vacuum all four standard tables before tests\n"
                   "  --aggregate-interval=NUM aggregate data over NUM seconds\n"
                   "  --sampling-rate=NUM      fraction of transactions to log (e.g. 0.01 for 1%%)\n"
+                  "  --progress-timestamp     use Unix epoch timestamps for progress\n"
                   "\nCommon options:\n"
                   "  -d, --debug              print debugging output\n"
          "  -h, --host=HOSTNAME      database server host or socket directory\n"
@@ -2773,6 +2775,7 @@ main(int argc, char **argv)
                {"aggregate-interval", required_argument, NULL, 5},
                {"rate", required_argument, NULL, 'R'},
                {"latency-limit", required_argument, NULL, 'L'},
+               {"progress-timestamp", no_argument, NULL, 6},
                {NULL, 0, NULL, 0}
        };
 
@@ -3109,6 +3112,10 @@ main(int argc, char **argv)
                                }
 #endif
                                break;
+                       case 6:
+                               progress_timestamp = true;
+                               benchmarking_option_set = true;
+                               break;
                        default:
                                fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
                                exit(1);
@@ -3747,6 +3754,7 @@ threadRun(void *arg)
                                                        sqlat,
                                                        lag,
                                                        stdev;
+                               char            tbuf[64];
 
                                /*
                                 * Add up the statistics of all threads.
@@ -3779,10 +3787,16 @@ threadRun(void *arg)
                                stdev = 0.001 * sqrt(sqlat - 1000000.0 * latency * latency);
                                lag = 0.001 * (lags - last_lags) / (count - last_count);
 
+                               if (progress_timestamp)
+                                       sprintf(tbuf, "%.03f s",
+                                                       INSTR_TIME_GET_MILLISEC(now_time) / 1000.0);
+                               else
+                                       sprintf(tbuf, "%.1f s", total_run);
+
                                fprintf(stderr,
-                                               "progress: %.1f s, %.1f tps, "
-                                               "lat %.3f ms stddev %.3f",
-                                               total_run, tps, latency, stdev);
+                                               "progress: %s, %.1f tps, lat %.3f ms stddev %.3f",
+                                               tbuf, tps, latency, stdev);
+
                                if (throttle_delay)
                                {
                                        fprintf(stderr, ", lag %.3f ms", lag);