From 3c2313f4815e1971e2f14e50fffc9328877c52d5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 3 Nov 2008 01:17:08 +0000 Subject: Change the pgstat logic so that the stats collector writes the stats file only upon requests from backends, rather than on a fixed 500msec cycle. (There's still throttling logic to ensure it writes no more often than once per 500msec, though.) This should result in a significant reduction in stats file write traffic in typical scenarios where the stats are demanded only infrequently. This approach also means that the former difficulty with changing stats_temp_directory on-the-fly has gone away, so remove the caution about that as well as the thrashing we did to minimize the trouble window. In passing, also fix pgstat_report_stat() so that we will send a stats message if we have function call stats but not table stats to report; this fixes a bug in the recent patch to support function-call stats. Martin Pihlak --- src/include/pgstat.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/include') diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 8c2d39e4c55..119d7b6966d 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -5,7 +5,7 @@ * * Copyright (c) 2001-2008, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/pgstat.h,v 1.78 2008/08/15 08:37:40 mha Exp $ + * $PostgreSQL: pgsql/src/include/pgstat.h,v 1.79 2008/11/03 01:17:08 tgl Exp $ * ---------- */ #ifndef PGSTAT_H @@ -33,6 +33,7 @@ typedef enum TrackFunctionsLevel typedef enum StatMsgType { PGSTAT_MTYPE_DUMMY, + PGSTAT_MTYPE_INQUIRY, PGSTAT_MTYPE_TABSTAT, PGSTAT_MTYPE_TABPURGE, PGSTAT_MTYPE_DROPDB, @@ -173,6 +174,19 @@ typedef struct PgStat_MsgDummy } PgStat_MsgDummy; +/* ---------- + * PgStat_MsgInquiry Sent by a backend to ask the collector + * to write the stats file. + * ---------- + */ + +typedef struct PgStat_MsgInquiry +{ + PgStat_MsgHdr m_hdr; + TimestampTz inquiry_time; /* minimum acceptable file timestamp */ +} PgStat_MsgInquiry; + + /* ---------- * PgStat_TableEntry Per-table info in a MsgTabstat * ---------- @@ -392,6 +406,7 @@ typedef union PgStat_Msg { PgStat_MsgHdr msg_hdr; PgStat_MsgDummy msg_dummy; + PgStat_MsgInquiry msg_inquiry; PgStat_MsgTabstat msg_tabstat; PgStat_MsgTabpurge msg_tabpurge; PgStat_MsgDropdb msg_dropdb; @@ -413,7 +428,7 @@ typedef union PgStat_Msg * ------------------------------------------------------------ */ -#define PGSTAT_FILE_FORMAT_ID 0x01A5BC97 +#define PGSTAT_FILE_FORMAT_ID 0x01A5BC98 /* ---------- * PgStat_StatDBEntry The collector's data per database @@ -494,6 +509,7 @@ typedef struct PgStat_StatFuncEntry */ typedef struct PgStat_GlobalStats { + TimestampTz stats_timestamp; /* time of stats file update */ PgStat_Counter timed_checkpoints; PgStat_Counter requested_checkpoints; PgStat_Counter buf_written_checkpoints; -- cgit v1.2.3