Tom Lane wrote:
>John A Meinel <john@arbash-meinel.com> writes:
>
>
>>>>Can we just replace gettimeofday() with a version that's basically:
>>>>
>>>>
>>>No, because it's also used for actual time-of-day calls. It'd be
>>>necessary to hack executor/instrument.c in particular.
>>>
>>>
>
>
>
>>Or we modify the win32 gettimeofday call to something like:
>>
>>
>
>That's what Magnus was talking about, but it's really no good because
>it would cause Postgres' now() function to fail to track post-boot-time
>changes in the system date setting. Which I think would rightly be
>considered a bug.
>
>The EXPLAIN ANALYZE instrumentation code will really be happier with a
>straight time-since-bootup counter; by using gettimeofday, it is
>vulnerable to giving wrong answers if someone changes the date setting
>while the EXPLAIN is running. But there is (AFAIK) no such call among
>the portable Unix syscalls. It seems reasonable to me to #ifdef that
>code to make use of QueryPerformanceCounter on Windows. This does not
>mean we want to alter the behavior of gettimeofday() where it's being
>used to find out the time of day.
>
> regards, tom lane
>
>
>
What if you changed the "initialized" to
if (count & 0xFF == 0) {
count = 1;
// get the new time of day
}
++count;
Then we would only be wrong for 256 gettimeofday calls. I agree it isn't
great, though. And probably better to just abstract (possibly just with
#ifdef) the calls for accurate timing, from the calls that actually need
the real time.
John
=:->