diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2016-09-19 22:55:43 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2016-09-19 22:59:44 +0300 |
commit | 476945c451d675cc31cd89bce202b775cef45a8e (patch) | |
tree | b34b4fedbf03688205da2a3521f8a91bb6114e59 | |
parent | ca93b816f823d3be3088095832c44232738b6553 (diff) |
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: <alpine.DEB.2.20.1608231622170.7102@lancre>
-rw-r--r-- | contrib/pgbench/pgbench.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index e5510fb830b..807d7dcdb8d 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -211,6 +211,7 @@ typedef struct Variable *variables; /* array of variable definitions */ int nvariables; 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 */ int64 txn_latencies; /* cumulated latencies */ @@ -967,6 +968,7 @@ top: thread->throttle_trigger += wait; st->txn_scheduled = thread->throttle_trigger; + st->sleep_until = st->txn_scheduled; st->sleeping = 1; st->throttling = true; st->is_throttled = true; @@ -982,7 +984,7 @@ top: INSTR_TIME_SET_CURRENT(now); now_us = INSTR_TIME_GET_MICROSEC(now); - if (st->txn_scheduled <= now_us) + if (st->sleep_until <= now_us) { st->sleeping = 0; /* Done sleeping, go ahead with next command */ if (st->throttling) @@ -1599,7 +1601,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 = 1; st->listen = 1; |