Make stats_temp_directory PGC_SIGHUP, and document how it may cause a temporary

"outage" of the statistics views.

This requires making the stats collector respond to SIGHUP, like the other
utility processes already did.
This commit is contained in:
Magnus Hagander 2008-08-25 15:11:01 +00:00
parent 8c032adec4
commit be8d6c5c34
4 changed files with 29 additions and 8 deletions

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.187 2008/08/22 18:47:07 momjian Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.188 2008/08/25 15:11:00 mha Exp $ -->
<chapter Id="runtime-config">
<title>Server Configuration</title>
@ -3418,7 +3418,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
path relative to the data directory or an absolute path. The default is
<filename>pg_stat_tmp</filename>. Pointing this at a RAM based filesystem
will decrease physical I/O requirements and can lead to increased
performance. This parameter can only be set at server start.
performance. If this parameter is changed when the system is running,
the statistics functions might return no information until a new
file has been written, which typically happens twice per second.
</para>
</listitem>
</varlistentry>

View File

@ -13,7 +13,7 @@
*
* Copyright (c) 2001-2008, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.179 2008/08/15 08:37:39 mha Exp $
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.180 2008/08/25 15:11:00 mha Exp $
* ----------
*/
#include "postgres.h"
@ -203,6 +203,7 @@ static PgStat_GlobalStats globalStats;
static volatile bool need_exit = false;
static volatile bool need_statwrite = false;
static volatile bool got_SIGHUP = false;
/*
* Total time charged to functions so far in the current backend.
@ -224,6 +225,7 @@ NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]);
static void pgstat_exit(SIGNAL_ARGS);
static void force_statwrite(SIGNAL_ARGS);
static void pgstat_beshutdown_hook(int code, Datum arg);
static void pgstat_sighup_handler(SIGNAL_ARGS);
static PgStat_StatDBEntry *pgstat_get_db_entry(Oid databaseid, bool create);
static void pgstat_write_statsfile(bool permanent);
@ -2571,7 +2573,7 @@ PgstatCollectorMain(int argc, char *argv[])
* Ignore all signals usually bound to some action in the postmaster,
* except SIGQUIT and SIGALRM.
*/
pqsignal(SIGHUP, SIG_IGN);
pqsignal(SIGHUP, pgstat_sighup_handler);
pqsignal(SIGINT, SIG_IGN);
pqsignal(SIGTERM, SIG_IGN);
pqsignal(SIGQUIT, pgstat_exit);
@ -2634,6 +2636,15 @@ PgstatCollectorMain(int argc, char *argv[])
if (need_exit)
break;
/*
* Reload configuration if we got SIGHUP from the postmaster.
*/
if (got_SIGHUP)
{
ProcessConfigFile(PGC_SIGHUP);
got_SIGHUP = false;
}
/*
* If time to write the stats file, do so. Note that the alarm
* interrupt isn't re-enabled immediately, but only after we next
@ -2834,6 +2845,13 @@ force_statwrite(SIGNAL_ARGS)
need_statwrite = true;
}
/* SIGHUP handler for collector process */
static void
pgstat_sighup_handler(SIGNAL_ARGS)
{
got_SIGHUP = true;
}
/*
* Lookup the hash table entry for the specified database. If no hash

View File

@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.561 2008/06/26 02:47:19 momjian Exp $
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.562 2008/08/25 15:11:01 mha Exp $
*
* NOTES
*
@ -1923,7 +1923,8 @@ SIGHUP_handler(SIGNAL_ARGS)
signal_child(PgArchPID, SIGHUP);
if (SysLoggerPID != 0)
signal_child(SysLoggerPID, SIGHUP);
/* PgStatPID does not currently need SIGHUP */
if (PgStatPID != 0)
signal_child(PgStatPID, SIGHUP);
/* Reload authentication config files too */
load_hba();

View File

@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.469 2008/08/22 18:47:07 momjian Exp $
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.470 2008/08/25 15:11:00 mha Exp $
*
*--------------------------------------------------------------------
*/
@ -2470,7 +2470,7 @@ static struct config_string ConfigureNamesString[] =
},
{
{"stats_temp_directory", PGC_POSTMASTER, STATS_COLLECTOR,
{"stats_temp_directory", PGC_SIGHUP, STATS_COLLECTOR,
gettext_noop("Writes temporary statistics files to the specified directory."),
NULL,
GUC_SUPERUSER_ONLY