diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-11-15 02:44:57 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-11-15 02:44:57 +0000 |
commit | 2986aa6a668bce3cfb83606bb52e9d01ae66ad6c (patch) | |
tree | 52b950f9d8ae7775cd24067866ecf1a0e265e821 | |
parent | 3779f7fd9fed8e77cb02a3ef26ab4311906377ad (diff) | |
download | postgresql-2986aa6a668bce3cfb83606bb52e9d01ae66ad6c.tar.gz postgresql-2986aa6a668bce3cfb83606bb52e9d01ae66ad6c.zip |
Add checkpoint_warning to warn of excessive checkpoints caused by too
few WAL files.
-rw-r--r-- | doc/src/sgml/runtime.sgml | 14 | ||||
-rw-r--r-- | doc/src/sgml/wal.sgml | 12 | ||||
-rw-r--r-- | src/backend/postmaster/postmaster.c | 20 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 7 | ||||
-rw-r--r-- | src/backend/utils/misc/postgresql.conf.sample | 1 | ||||
-rw-r--r-- | src/include/access/xlog.h | 3 |
6 files changed, 52 insertions, 5 deletions
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 6ca8f820e34..26777ae43a8 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.154 2002/11/15 01:57:25 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.155 2002/11/15 02:44:50 momjian Exp $ --> <Chapter Id="runtime"> @@ -2081,6 +2081,18 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir' </listitem> </varlistentry> + <variablelist> + <varlistentry> + <term><varname>CHECKPOINT_WARNING</varname> (<type>integer</type>)</term> + <listitem> + <para> + 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. + </para> + </listitem> + </varlistentry> + <varlistentry> <term><varname>COMMIT_DELAY</varname> (<type>integer</type>)</term> <listitem> diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 7f603221acc..2589ab8163b 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -1,4 +1,4 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/wal.sgml,v 1.21 2002/11/02 22:23:01 tgl Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/wal.sgml,v 1.22 2002/11/15 02:44:54 momjian Exp $ --> <chapter id="wal"> <title>Write-Ahead Logging (<acronym>WAL</acronym>)</title> @@ -301,6 +301,16 @@ </para> <para> + Checkpoints are fairly expensive because they force all dirty kernel + buffers to disk using the operating system <literal>sync()</> call. + Busy servers may fill checkpoint segment files too quickly, + causing excessive checkpointing. If such forced checkpoints happen + more frequently than <varname>CHECKPOINT_WARNING</varname> seconds, + a message, will be output to the server logs recommending increasing + <varname>CHECKPOINT_SEGMENTS</varname>. + </para> + + <para> The <varname>COMMIT_DELAY</varname> parameter defines for how many microseconds the backend will sleep after writing a commit record to the log with <function>LogInsert</function> but before diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index a9d18a575b8..53aa731e719 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -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 * diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 96d42109e06..62417bfe118 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -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 <peter_e@gmx.net>. @@ -661,6 +661,11 @@ static struct config_int }, { + {"checkpoint_warning", PGC_SIGHUP}, &CheckPointWarning, + 30, 0, INT_MAX, NULL, NULL + }, + + { {"wal_buffers", PGC_POSTMASTER}, &XLOGbuffers, 8, 4, INT_MAX, NULL, NULL }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index becc6dfbe74..5fbfafd214a 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -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 diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index f5c3e59cbce..1659c65b930 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -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; |