Commit 3c2313f4 authored by Tom Lane's avatar Tom Lane

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
parent d7112cfa
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.191 2008/09/30 10:52:09 heikki Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.192 2008/11/03 01:17:08 tgl Exp $ -->
<chapter Id="runtime-config"> <chapter Id="runtime-config">
<title>Server Configuration</title> <title>Server Configuration</title>
...@@ -3347,9 +3347,6 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; ...@@ -3347,9 +3347,6 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
improved performance. improved performance.
This parameter can only be set in the <filename>postgresql.conf</> This parameter can only be set in the <filename>postgresql.conf</>
file or on the server command line. file or on the server command line.
If this parameter is changed while the server is running, there is a
small window of time until the new statistics file has been written
during which the statistics functions might return no information.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
This diff is collapsed.
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (c) 2001-2008, PostgreSQL Global Development Group * 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 #ifndef PGSTAT_H
...@@ -33,6 +33,7 @@ typedef enum TrackFunctionsLevel ...@@ -33,6 +33,7 @@ typedef enum TrackFunctionsLevel
typedef enum StatMsgType typedef enum StatMsgType
{ {
PGSTAT_MTYPE_DUMMY, PGSTAT_MTYPE_DUMMY,
PGSTAT_MTYPE_INQUIRY,
PGSTAT_MTYPE_TABSTAT, PGSTAT_MTYPE_TABSTAT,
PGSTAT_MTYPE_TABPURGE, PGSTAT_MTYPE_TABPURGE,
PGSTAT_MTYPE_DROPDB, PGSTAT_MTYPE_DROPDB,
...@@ -173,6 +174,19 @@ typedef struct PgStat_MsgDummy ...@@ -173,6 +174,19 @@ typedef struct PgStat_MsgDummy
} 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 * PgStat_TableEntry Per-table info in a MsgTabstat
* ---------- * ----------
...@@ -392,6 +406,7 @@ typedef union PgStat_Msg ...@@ -392,6 +406,7 @@ typedef union PgStat_Msg
{ {
PgStat_MsgHdr msg_hdr; PgStat_MsgHdr msg_hdr;
PgStat_MsgDummy msg_dummy; PgStat_MsgDummy msg_dummy;
PgStat_MsgInquiry msg_inquiry;
PgStat_MsgTabstat msg_tabstat; PgStat_MsgTabstat msg_tabstat;
PgStat_MsgTabpurge msg_tabpurge; PgStat_MsgTabpurge msg_tabpurge;
PgStat_MsgDropdb msg_dropdb; PgStat_MsgDropdb msg_dropdb;
...@@ -413,7 +428,7 @@ typedef union PgStat_Msg ...@@ -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 * PgStat_StatDBEntry The collector's data per database
...@@ -494,6 +509,7 @@ typedef struct PgStat_StatFuncEntry ...@@ -494,6 +509,7 @@ typedef struct PgStat_StatFuncEntry
*/ */
typedef struct PgStat_GlobalStats typedef struct PgStat_GlobalStats
{ {
TimestampTz stats_timestamp; /* time of stats file update */
PgStat_Counter timed_checkpoints; PgStat_Counter timed_checkpoints;
PgStat_Counter requested_checkpoints; PgStat_Counter requested_checkpoints;
PgStat_Counter buf_written_checkpoints; PgStat_Counter buf_written_checkpoints;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment