From 1def9063ca3c8ad66a2814a90af95ca22636bf66 Mon Sep 17 00:00:00 2001 From: Teodor Sigaev <teodor@sigaev.ru> Date: Wed, 16 Sep 2015 17:24:53 +0300 Subject: [PATCH] pgbench progress with timestamp 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 <coelho@cri.ensmp.fr> --- doc/src/sgml/ref/pgbench.sgml | 13 +++++++++++++ src/bin/pgbench/pgbench.c | 20 +++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml index ba3edc46307..0ac40f10028 100644 --- a/doc/src/sgml/ref/pgbench.sgml +++ b/doc/src/sgml/ref/pgbench.sgml @@ -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> diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 4071a4247ba..6ae1b869dd4 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -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); -- GitLab