Re: Getting rid of extra gettimeofday() calls - Mailing list pgsql-hackers

From Simon Riggs
Subject Re: Getting rid of extra gettimeofday() calls
Date
Msg-id 1150748009.2587.112.camel@localhost.localdomain
Whole thread Raw
In response to Getting rid of extra gettimeofday() calls  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Getting rid of extra gettimeofday() calls
List pgsql-hackers
On Mon, 2006-06-19 at 11:17 -0400, Tom Lane wrote:
> As of CVS tip, PG does up to four separate gettimeofday() calls upon the
> arrival of a new client command.  This is because the statement_timestamp,
> stats_command_string, log_duration, and statement_timeout features each
> independently save an indication of statement start time.  Given what
> we've found out recently about gettimeofday() being unduly expensive on
> some hardware, this cries out to get fixed.  I propose that we do
> SetCurrentStatementStartTimestamp() immediately upon receiving a client
> message, and then make the other features copy that value instead of
> fetching their own.

Yes. Well spotted. That should make each timed aspect more accurate also
since its the same value.

Presumably you don't mean *every* client message, just stmt start ones. 

Can we set that in GetTransactionSnapshot() - that way a serializable
transaction won't need to update the time after each statement. We can
then record this as the SetCurrentSnapshotStartTimestamp().

> Another gettimeofday() call that I would like to get rid of is the one
> currently done at the end of statement when stats_command_string is
> enabled: we record current time when resetting the activity_string to
> <IDLE>.  Would anyone be terribly upset if this used statement_timestamp
> instead?  The effect would be that for an idle backend,
> pg_stat_activity.query_start would reflect the start time of its latest
> query instead of the time at which it finished the query.  I can see
> some use for the current behavior but I don't really think it's worth
> the overhead of a gettimeofday() call.

Presumably we have to do at least one at the end when doing statement
logging?

I notice there is also one in elog.c for when we have %t set. We
probably don't need to do both when statement logging.

> Preliminary tests say that after the shared-memory change I committed
> yesterday, the overhead of stats_command_string consists *entirely*
> of the two added gettimeofday() calls. 
--  Simon Riggs EnterpriseDB          http://www.enterprisedb.com



pgsql-hackers by date:

Previous
From: Robert Lor
Date:
Subject: Generic Monitoring Framework Proposal
Next
From: Tom Lane
Date:
Subject: Re: Getting rid of extra gettimeofday() calls