From: Heikki Linnakangas Date: Mon, 19 Sep 2016 19:55:43 +0000 (+0300) Subject: Fix latency calculation when there are \sleep commands in the script. X-Git-Tag: REL_10_BETA1~1704 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=40c3fe4980e73acb0db75a3c737a4a52e09d4cf4;p=postgresql Fix latency calculation when there are \sleep commands in the script. We can't use txn_scheduled to hold the sleep-until time for \sleep, because that interferes with calculation of the latency of the transaction as whole. Backpatch to 9.4, where this bug was introduced. Fabien COELHO Discussion: --- diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 56c37d537e..4676a59020 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -250,6 +250,7 @@ typedef struct int nvariables; /* number of variables */ bool vars_sorted; /* are variables sorted by name? */ int64 txn_scheduled; /* scheduled start time of transaction (usec) */ + int64 sleep_until; /* scheduled start time of next cmd (usec) */ instr_time txn_begin; /* used for measuring schedule lag times */ instr_time stmt_begin; /* used for measuring statement latencies */ int use_file; /* index in sql_scripts for this client */ @@ -1830,6 +1831,7 @@ top: } } + st->sleep_until = st->txn_scheduled; st->sleeping = true; st->throttling = true; st->is_throttled = true; @@ -1842,7 +1844,7 @@ top: { /* are we sleeping? */ if (INSTR_TIME_IS_ZERO(now)) INSTR_TIME_SET_CURRENT(now); - if (INSTR_TIME_GET_MICROSEC(now) < st->txn_scheduled) + if (INSTR_TIME_GET_MICROSEC(now) < st->sleep_until) return true; /* Still sleeping, nothing to do here */ /* Else done sleeping, go ahead with next command */ st->sleeping = false; @@ -2141,7 +2143,7 @@ top: usec *= 1000000; INSTR_TIME_SET_CURRENT(now); - st->txn_scheduled = INSTR_TIME_GET_MICROSEC(now) + usec; + st->sleep_until = INSTR_TIME_GET_MICROSEC(now) + usec; st->sleeping = true; st->listen = true;