to have different values in different processes of the primary server.
Also put it into the "Streaming Replication" GUC category; it doesn't belong
in "Standby Servers" because you use it on the master not the standby.
In passing also correct guc.c's idea of wal_keep_segments' category.
-<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.289 2010/07/03 20:43:57 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.290 2010/07/03 21:23:58 tgl Exp $ -->
<chapter Id="runtime-config">
<title>Server Configuration</title>
</para>
</listitem>
</varlistentry>
+
+ <varlistentry id="guc-vacuum-defer-cleanup-age" xreflabel="vacuum_defer_cleanup_age">
+ <term><varname>vacuum_defer_cleanup_age</varname> (<type>integer</type>)</term>
+ <indexterm>
+ <primary><varname>vacuum_defer_cleanup_age</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Specifies the number of transactions by which <command>VACUUM</> and
+ <acronym>HOT</> updates will defer cleanup of dead row versions. The
+ default is zero transactions, meaning that dead row versions can be
+ removed as soon as possible, that is, as soon as they are no longer
+ visible to any open transaction. You may wish to set this to a
+ non-zero value on a primary server that is supporting hot standby
+ servers, as described in <xref linkend="hot-standby">. This allows
+ more time for queries on the standby to complete without incurring
+ conflicts due to early cleanup of rows. However, since the value
+ is measured in terms of number of write transactions occurring on the
+ primary server, it is difficult to predict just how much additional
+ grace time will be made available to standby queries.
+ This parameter can only be set in the <filename>postgresql.conf</>
+ file or on the server command line.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</sect2>
</listitem>
</varlistentry>
- <varlistentry id="guc-vacuum-defer-cleanup-age" xreflabel="vacuum_defer_cleanup_age">
- <term><varname>vacuum_defer_cleanup_age</varname> (<type>integer</type>)</term>
- <indexterm>
- <primary><varname>vacuum_defer_cleanup_age</> configuration parameter</primary>
- </indexterm>
- <listitem>
- <para>
- Specifies the number of transactions by which <command>VACUUM</> and
- <acronym>HOT</> updates will defer cleanup of dead row versions. The
- default is 0 transactions, meaning that dead row versions will be
- removed as soon as possible. You may wish to set this to a non-zero
- value when planning or maintaining a Hot Standby connection, as
- described in <xref linkend="hot-standby">. The recommended value is
- <literal>0</> unless you have clear reason to increase it. The purpose
- of the parameter is to allow the user to specify an approximate time
- delay before cleanup occurs. However, it should be noted that there is
- no direct link with any specific time delay and so the results will be
- application and installation specific, as well as variable over time,
- depending upon the transaction rate (of writes only).
- </para>
- </listitem>
- </varlistentry>
-
</variablelist>
</sect2>
</sect1>
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/ipc/procarray.c,v 1.70 2010/05/14 07:11:49 sriggs Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/ipc/procarray.c,v 1.71 2010/07/03 21:23:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
LWLockRelease(ProcArrayLock);
/*
- * Compute the cutoff XID, being careful not to generate a "permanent" XID
+ * Compute the cutoff XID, being careful not to generate a "permanent" XID.
+ *
+ * vacuum_defer_cleanup_age provides some additional "slop" for the
+ * benefit of hot standby queries on slave servers. This is quick and
+ * dirty, and perhaps not all that useful unless the master has a
+ * predictable transaction rate, but it's what we've got. Note that
+ * we are assuming vacuum_defer_cleanup_age isn't large enough to cause
+ * wraparound --- so guc.c should limit it to no more than the xidStopLimit
+ * threshold in varsup.c.
*/
result -= vacuum_defer_cleanup_age;
if (!TransactionIdIsNormal(result))
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.558 2010/07/03 20:43:58 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.559 2010/07/03 21:23:58 tgl Exp $
*
*--------------------------------------------------------------------
*/
},
{
- {"vacuum_defer_cleanup_age", PGC_USERSET, WAL_STANDBY_SERVERS,
- gettext_noop("Age by which VACUUM and HOT cleanup should be deferred, if any."),
+ {"vacuum_defer_cleanup_age", PGC_SIGHUP, WAL_REPLICATION,
+ gettext_noop("Number of transactions by which VACUUM and HOT cleanup should be deferred, if any."),
NULL
},
&vacuum_defer_cleanup_age,
},
{
- {"wal_keep_segments", PGC_SIGHUP, WAL_CHECKPOINTS,
+ {"wal_keep_segments", PGC_SIGHUP, WAL_REPLICATION,
gettext_noop("Sets the number of WAL files held for standby servers."),
NULL
},
#max_wal_senders = 0 # max number of walsender processes
#wal_sender_delay = 200ms # walsender cycle time, 1-10000 milliseconds
#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables
+#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
# - Standby Servers -
#max_standby_streaming_delay = 30s # max delay before canceling queries
# when reading streaming WAL;
# -1 allows indefinite delay
-#vacuum_defer_cleanup_age = 0 # number of transactions by which cleanup is deferred
#------------------------------------------------------------------------------