From: | Simon Riggs <simon(at)2ndquadrant(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-hackers(at)postgreSQL(dot)org |
Subject: | Re: Getting rid of extra gettimeofday() calls |
Date: | 2006-06-19 20:13:28 |
Message-ID: | 1150748009.2587.112.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2006-06-19 20:27:58 | Re: Getting rid of extra gettimeofday() calls |
Previous Message | Robert Lor | 2006-06-19 19:58:48 | Generic Monitoring Framework Proposal |