From aceedd88f612472dae447fb59077abe8ed22f1f6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 3 Jul 2010 21:23:58 +0000 Subject: [PATCH] Make vacuum_defer_cleanup_age be PGC_SIGHUP level, since it's not sensible 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. --- doc/src/sgml/config.sgml | 50 ++++++++++--------- src/backend/storage/ipc/procarray.c | 12 ++++- src/backend/utils/misc/guc.c | 8 +-- src/backend/utils/misc/postgresql.conf.sample | 2 +- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 391e4365c0..86bf6ee912 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1,4 +1,4 @@ - + Server Configuration @@ -1914,6 +1914,31 @@ SET ENABLE_SEQSCAN TO OFF; + + + vacuum_defer_cleanup_age (integer) + + vacuum_defer_cleanup_age configuration parameter + + + + Specifies the number of transactions by which VACUUM and + 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 . 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 postgresql.conf + file or on the server command line. + + + @@ -2004,29 +2029,6 @@ SET ENABLE_SEQSCAN TO OFF; - - vacuum_defer_cleanup_age (integer) - - vacuum_defer_cleanup_age configuration parameter - - - - Specifies the number of transactions by which VACUUM and - 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 . The recommended value is - 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). - - - - diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 8cef305239..9163bc68c4 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -37,7 +37,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -1117,7 +1117,15 @@ GetOldestXmin(bool allDbs, bool ignoreVacuum) 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)) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index f2caad2cd9..ac7f1a26fc 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * 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 $ * *-------------------------------------------------------------------- */ @@ -1631,8 +1631,8 @@ static struct config_int ConfigureNamesInt[] = }, { - {"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, @@ -1675,7 +1675,7 @@ static struct config_int ConfigureNamesInt[] = }, { - {"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 }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index e765664ecc..a3b145796d 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -188,6 +188,7 @@ #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 - @@ -198,7 +199,6 @@ #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 #------------------------------------------------------------------------------