mirror of
https://github.com/postgres/postgres.git
synced 2025-05-15 19:15:29 +03:00
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>
This commit is contained in:
parent
156f974f56
commit
f65764a04a
@ -250,6 +250,7 @@ typedef struct
|
|||||||
int nvariables; /* number of variables */
|
int nvariables; /* number of variables */
|
||||||
bool vars_sorted; /* are variables sorted by name? */
|
bool vars_sorted; /* are variables sorted by name? */
|
||||||
int64 txn_scheduled; /* scheduled start time of transaction (usec) */
|
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 txn_begin; /* used for measuring schedule lag times */
|
||||||
instr_time stmt_begin; /* used for measuring statement latencies */
|
instr_time stmt_begin; /* used for measuring statement latencies */
|
||||||
int use_file; /* index in sql_scripts for this client */
|
int use_file; /* index in sql_scripts for this client */
|
||||||
@ -1828,6 +1829,7 @@ top:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
st->sleep_until = st->txn_scheduled;
|
||||||
st->sleeping = true;
|
st->sleeping = true;
|
||||||
st->throttling = true;
|
st->throttling = true;
|
||||||
st->is_throttled = true;
|
st->is_throttled = true;
|
||||||
@ -1840,7 +1842,7 @@ top:
|
|||||||
{ /* are we sleeping? */
|
{ /* are we sleeping? */
|
||||||
if (INSTR_TIME_IS_ZERO(now))
|
if (INSTR_TIME_IS_ZERO(now))
|
||||||
INSTR_TIME_SET_CURRENT(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 */
|
return true; /* Still sleeping, nothing to do here */
|
||||||
/* Else done sleeping, go ahead with next command */
|
/* Else done sleeping, go ahead with next command */
|
||||||
st->sleeping = false;
|
st->sleeping = false;
|
||||||
@ -2138,7 +2140,7 @@ top:
|
|||||||
usec *= 1000000;
|
usec *= 1000000;
|
||||||
|
|
||||||
INSTR_TIME_SET_CURRENT(now);
|
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->sleeping = true;
|
||||||
|
|
||||||
st->listen = true;
|
st->listen = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user