Add checkpoint_warning to warn of excessive checkpoints caused by too
authorBruce Momjian
Fri, 15 Nov 2002 02:44:57 +0000 (02:44 +0000)
committerBruce Momjian
Fri, 15 Nov 2002 02:44:57 +0000 (02:44 +0000)
few WAL files.

doc/src/sgml/runtime.sgml
doc/src/sgml/wal.sgml
src/backend/postmaster/postmaster.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/include/access/xlog.h

index 6ca8f820e34f57ffaa0a6348f75760c76ef14e98..26777ae43a8dd60946a7a255f86c1eecc4e3d7fd 100644 (file)
@@ -1,5 +1,5 @@
 
 
 
@@ -2081,6 +2081,18 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
       
      
 
+    
+     
+      CHECKPOINT_WARNING (integer)
+      
+       
+        Send a message to the server logs if checkpoints caused by the
+        filling of checkpoint segment files happens more frequently than
+        this number of seconds.  Zero turns off the warning.
+       
+      
+     
+
      
       COMMIT_DELAY (integer)
       
index 7f603221accee480bbf03989caadc875688bdb93..2589ab8163b340ae462abbc9798d78eb0b301238 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
 
  Write-Ahead Logging (<acronym>WAL</acronym>)
    correspondingly increase shared memory usage.
   
 
+  
+   Checkpoints are fairly expensive because they force all dirty kernel
+   buffers to disk using the operating system sync() call.
+   Busy servers may fill checkpoint segment files too quickly,
+   causing excessive checkpointing. If such forced checkpoints happen
+   more frequently than CHECKPOINT_WARNING seconds, 
+   a message, will be output to the server logs recommending increasing 
+   CHECKPOINT_SEGMENTS.
+  
+
   
    The COMMIT_DELAY parameter defines for how many
    microseconds the backend will sleep after writing a commit
index a9d18a575b8e6ef056f14fcb6d5e72fd5ecfe4b7..53aa731e7196f74299de279643e5448c87b8237a 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.296 2002/11/15 01:57:26 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.297 2002/11/15 02:44:55 momjian Exp $
  *
  * NOTES
  *
@@ -198,6 +198,8 @@ bool        SilentMode = false; /* silent mode (-S) */
 int            PreAuthDelay = 0;
 int            AuthenticationTimeout = 60;
 int            CheckPointTimeout = 300;
+int            CheckPointWarning = 30;
+time_t     LastSignalledCheckpoint = 0;
 
 bool       log_hostname;       /* for ps display */
 bool       LogSourcePort;
@@ -2329,6 +2331,22 @@ sigusr1_handler(SIGNAL_ARGS)
 
    if (CheckPostmasterSignal(PMSIGNAL_DO_CHECKPOINT))
    {
+       if (CheckPointWarning != 0)
+       {
+           /*
+            *  This only times checkpoints forced by running out of
+            *  segment files.  Other checkpoints could reduce
+            *  the frequency of forced checkpoints.
+            */
+           time_t now = time(NULL);
+
+           if (now - LastSignalledCheckpoint < CheckPointWarning)
+               elog(LOG, "Checkpoint segments are being created too frequently (%d secs)\n
+               Consider increasing CHECKPOINT_SEGMENTS",
+               now - LastSignalledCheckpoint);
+           LastSignalledCheckpoint = now;
+       }
+
        /*
         * Request to schedule a checkpoint
         *
index 96d42109e0605a83b166eeac1f9b53e72b52eeba..62417bfe11826686b54cf6426dddbaf189fdebf8 100644 (file)
@@ -5,7 +5,7 @@
  * command, configuration file, and command line options.
  * See src/backend/utils/misc/README for more information.
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.105 2002/11/15 01:57:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.106 2002/11/15 02:44:57 momjian Exp $
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  * Written by Peter Eisentraut .
@@ -660,6 +660,11 @@ static struct config_int
        300, 30, 3600, NULL, NULL
    },
 
+   {
+       {"checkpoint_warning", PGC_SIGHUP}, &CheckPointWarning,
+       30, 0, INT_MAX, NULL, NULL
+   },
+
    {
        {"wal_buffers", PGC_POSTMASTER}, &XLOGbuffers,
        8, 4, INT_MAX, NULL, NULL
index becc6dfbe745466d27ca7575e1b72d75890c90ad..5fbfafd214a3581cc8ea936421812da2fc32f897 100644 (file)
@@ -65,6 +65,7 @@
 #
 #checkpoint_segments = 3   # in logfile segments, min 1, 16MB each
 #checkpoint_timeout = 300  # range 30-3600, in seconds
+#checkpoint_warning = 30   # 0 is off, in seconds
 #
 #commit_delay = 0      # range 0-100000, in microseconds
 #commit_siblings = 5       # range 1-1000
index f5c3e59cbcef9ab7211d8d9af29b68ed1ccd7f19..1659c65b930a49cf726818b6cd045d2b3a827d72 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xlog.h,v 1.39 2002/09/26 22:58:34 tgl Exp $
+ * $Id: xlog.h,v 1.40 2002/11/15 02:44:57 momjian Exp $
  */
 #ifndef XLOG_H
 #define XLOG_H
@@ -184,6 +184,7 @@ extern XLogRecPtr ProcLastRecEnd;
 
 /* these variables are GUC parameters related to XLOG */
 extern int CheckPointSegments;
+extern int CheckPointWarning;
 extern int XLOGbuffers;
 extern int XLOG_DEBUG;
 extern char *XLOG_sync_method;