On 2020-11-09 23:25, Tom Lane wrote:
> Alexey Kondratov <[email protected]> writes:
>> On 2020-11-09 21:53, Tom Lane wrote:
>>> 0002 seems like a pretty clear bug fix, though I wonder if this is
>>> exactly
>>> what we want to do going forward. It seems like a very large
>>> fraction of
>>> the callers of TimestampDifference would like to have the value in
>>> msec,
>>> which means we're doing a whole lot of expensive and error-prone
>>> arithmetic to break down the difference to sec/usec and then put it
>>> back together again. Let's get rid of that by inventing, say
>>> TimestampDifferenceMilliseconds(...).
>
>> Yeah, I get into this problem after a bug in another extension —
>> pg_wait_sampling. I have attached 0002, which implements
>> TimestampDifferenceMilliseconds(), so 0003 just uses this new function
>> to solve the initial issues. If it looks good to you, then we can
>> switch
>> all similar callers to it.
>
> Yeah, let's move forward with that --- in fact, I'm inclined to
> back-patch it. (Not till the current release cycle is done, though.
> I don't find this important enough to justify a last-moment patch.)
>
> BTW, I wonder if we shouldn't make TimestampDifferenceMilliseconds
> round any fractional millisecond up rather than down. Rounding down
> seems to create a hazard of uselessly waking just before the delay is
> completed. Better to wake just after.
>
Yes, it make sense. I have changed TimestampDifferenceMilliseconds() to
round result up if there is a reminder.
After looking on the autoprewarm code more closely I have realised that
this 'double dump' issues was not an issues at all. I have just
misplaced a debug elog(), so its second output in the log was only
indicating that we calculated delay_in_ms one more time. Actually, even
with wrong calculation of delay_in_ms the only problem was that we were
busy looping with ~1 second interval instead of waiting on latch.
It is still a buggy behaviour, but much less harmful than I have
originally thought.
Regards
--
Alexey Kondratov
Postgres Professional https://www.postgrespro.com
Russian Postgres Company