Make stats_temp_directory PGC_SIGHUP, and document how it may cause a temporary
authorMagnus Hagander
Mon, 25 Aug 2008 15:11:01 +0000 (15:11 +0000)
committerMagnus Hagander
Mon, 25 Aug 2008 15:11:01 +0000 (15:11 +0000)
"outage" of the statistics views.

This requires making the stats collector respond to SIGHUP, like the other
utility processes already did.

doc/src/sgml/config.sgml
src/backend/postmaster/pgstat.c
src/backend/postmaster/postmaster.c
src/backend/utils/misc/guc.c

index 0f9b33c0579832bcb00cd3295dfa386fc157ea5b..3eca0bab845860a48cfed2adf8056562de7c3b08 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
 
   Server Configuration
@@ -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
         pg_stat_tmp. 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.
        
       
      
index e09becdeb80df6ed7fbcd7ffd06ab3469c5379fd..c822b35d0034f6069752e2e9ca47eca92adcbd69 100644 (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
index 6f00e5ad341785a9e23e145c7432a93050db9bea..8bc95f1f2f747091eaf68e4a20aea8a6b0be6c21 100644 (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();
index 2c6e4b61e9d0355e01e919d51c08e4acc992eee2..149817e6c96cf250163a16142e753b8dfb2688e7 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut .
  *
  * 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