Skip to content

Commit 1def906

Browse files
committed
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>
1 parent 5878a37 commit 1def906

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

doc/src/sgml/ref/pgbench.sgml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,19 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
428428
</listitem>
429429
</varlistentry>
430430

431+
<varlistentry>
432+
<term><option>--progress-timestamp</option></term>
433+
<listitem>
434+
<para>
435+
When showing progress (option <option>-P</>), use a timestamp
436+
(Unix epoch) instead of the number of seconds since the
437+
beginning of the run. The unit is in seconds, with millisecond
438+
precision after the dot.
439+
This helps compare logs generated by various tools.
440+
</para>
441+
</listitem>
442+
</varlistentry>
443+
431444
<varlistentry>
432445
<term><option>-r</option></term>
433446
<term><option>--report-latencies</option></term>

src/bin/pgbench/pgbench.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ bool use_quiet; /* quiet logging onto stderr */
165165
int agg_interval; /* log aggregates instead of individual
166166
* transactions */
167167
int progress = 0; /* thread progress report every this seconds */
168+
bool progress_timestamp = false; /* progress report with Unix time */
168169
int progress_nclients = 0; /* number of clients for progress
169170
* report */
170171
int progress_nthreads = 0; /* number of threads for progress
@@ -388,6 +389,7 @@ usage(void)
388389
" -v, --vacuum-all vacuum all four standard tables before tests\n"
389390
" --aggregate-interval=NUM aggregate data over NUM seconds\n"
390391
" --sampling-rate=NUM fraction of transactions to log (e.g. 0.01 for 1%%)\n"
392+
" --progress-timestamp use Unix epoch timestamps for progress\n"
391393
"\nCommon options:\n"
392394
" -d, --debug print debugging output\n"
393395
" -h, --host=HOSTNAME database server host or socket directory\n"
@@ -2773,6 +2775,7 @@ main(int argc, char **argv)
27732775
{"aggregate-interval", required_argument, NULL, 5},
27742776
{"rate", required_argument, NULL, 'R'},
27752777
{"latency-limit", required_argument, NULL, 'L'},
2778+
{"progress-timestamp", no_argument, NULL, 6},
27762779
{NULL, 0, NULL, 0}
27772780
};
27782781

@@ -3109,6 +3112,10 @@ main(int argc, char **argv)
31093112
}
31103113
#endif
31113114
break;
3115+
case 6:
3116+
progress_timestamp = true;
3117+
benchmarking_option_set = true;
3118+
break;
31123119
default:
31133120
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
31143121
exit(1);
@@ -3747,6 +3754,7 @@ threadRun(void *arg)
37473754
sqlat,
37483755
lag,
37493756
stdev;
3757+
char tbuf[64];
37503758

37513759
/*
37523760
* Add up the statistics of all threads.
@@ -3779,10 +3787,16 @@ threadRun(void *arg)
37793787
stdev = 0.001 * sqrt(sqlat - 1000000.0 * latency * latency);
37803788
lag = 0.001 * (lags - last_lags) / (count - last_count);
37813789

3790+
if (progress_timestamp)
3791+
sprintf(tbuf, "%.03f s",
3792+
INSTR_TIME_GET_MILLISEC(now_time) / 1000.0);
3793+
else
3794+
sprintf(tbuf, "%.1f s", total_run);
3795+
37823796
fprintf(stderr,
3783-
"progress: %.1f s, %.1f tps, "
3784-
"lat %.3f ms stddev %.3f",
3785-
total_run, tps, latency, stdev);
3797+
"progress: %s, %.1f tps, lat %.3f ms stddev %.3f",
3798+
tbuf, tps, latency, stdev);
3799+
37863800
if (throttle_delay)
37873801
{
37883802
fprintf(stderr, ", lag %.3f ms", lag);

0 commit comments

Comments
 (0)