diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-03 01:17:08 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-03 01:17:08 +0000 |
commit | 3c2313f4815e1971e2f14e50fffc9328877c52d5 (patch) | |
tree | 337449631f837f11bd006530d170bd6d1d5a2c4a /src/include | |
parent | d7112cfa884e5125a20a24590f193ceebedf0146 (diff) |
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
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/pgstat.h | 20 |
1 files changed, 18 insertions, 2 deletions
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, @@ -174,6 +175,19 @@ typedef struct 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; |