Commit be8d6c5c authored by Magnus Hagander's avatar Magnus Hagander

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.
parent 8c032ade
<!-- $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>
......
......@@ -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
......
......@@ -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();
......
......@@ -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
......
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