vacuum_defer_cleanup_age
Hi,
vacuum_defer_cleanup_age is categorized as "Statement Behavior"
parameter in the document. On the other hand, it's categorized
as "Hot Standby" one in postgresql.conf. Why do we need to do so?
Regards,
--
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center
On 11/06/10 05:36, Fujii Masao wrote:
vacuum_defer_cleanup_age is categorized as "Statement Behavior"
parameter in the document. On the other hand, it's categorized
as "Hot Standby" one in postgresql.conf. Why do we need to do so?
Yeah, there's clearly a mismatch. I think "Hot Standby" is the right
place, altough you could argue that it should be together with
vacuum_freeze_min_age and vacuum_freeze_table_age too.
We seem to be missing an entry for "Write-Ahead Log / Hot Standby" in
the config_group_names list in guc.c. hot_standby GUC marked to beling
in WAL_SETTINGS in guc.c.
What's the policy with that, should all the sections in the sample
config file and docs have a corresponding enum in config_group_names? I
guess they should, but many of them seem to be missing. There's no
separate entry in config_group_names for "Write-Ahead Log / Archiving",
"Resource Usage / Cost-Based Vacuum Delay" and "Resource Usage /
Asynchronous Behavior" either, for example.
Should I add entries in the enum for all the missing ones?
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
On Fri, Jun 11, 2010 at 7:25 PM, Heikki Linnakangas
<heikki.linnakangas@enterprisedb.com> wrote:
Yeah, there's clearly a mismatch. I think "Hot Standby" is the right place,
altough you could argue that it should be together with
vacuum_freeze_min_age and vacuum_freeze_table_age too.We seem to be missing an entry for "Write-Ahead Log / Hot Standby" in the
config_group_names list in guc.c. hot_standby GUC marked to beling in
WAL_SETTINGS in guc.c.What's the policy with that, should all the sections in the sample config
file and docs have a corresponding enum in config_group_names? I guess they
should, but many of them seem to be missing. There's no separate entry in
config_group_names for "Write-Ahead Log / Archiving", "Resource Usage /
Cost-Based Vacuum Delay" and "Resource Usage / Asynchronous Behavior"
either, for example.Should I add entries in the enum for all the missing ones?
+1. This seems sensible.
Regards,
--
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center
Fujii Masao <masao.fujii@gmail.com> wrote:
On Fri, Jun 11, 2010 at 7:25 PM, Heikki Linnakangas
What's the policy with that, should all the sections in the sample config
file and docs have a corresponding enum in config_group_names?+1. This seems sensible.
Here is a patch to do that. I used terms in the documentation for category
names. Also, some uncategorized variables moved into detailed groups.
Added categories:
Resource Usage / Cost-Based Vacuum Delay
Resource Usage / Background Writer
Resource Usage / Asynchronous Behavior
Write-Ahead Log / Archiving
Write-Ahead Log / Standby Servers
Renamed in the configuration file:
Replication ==> Streaming Replication
Hot Standby ==> Standby Servers
Regards,
---
Takahiro Itagaki
NTT Open Source Software Center
Attachments:
guc-category-cleanup_20100615.diffapplication/octet-stream; name=guc-category-cleanup_20100615.diffDownload
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 48ad9f6..4ab0939 100644
*** a/doc/src/sgml/config.sgml
--- b/doc/src/sgml/config.sgml
*************** SET ENABLE_SEQSCAN TO OFF;
*** 1966,1971 ****
--- 1966,1994 ----
</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 <xref linkend="hot-standby">
+ configuration. 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>
*************** COPY postgres_log FROM '/full/path/to/lo
*** 4407,4435 ****
</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 <xref linkend="hot-standby">
- configuration. 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>
-
<varlistentry id="guc-bytea-output" xreflabel="bytea_output">
<term><varname>bytea_output</varname> (<type>enum</type>)</term>
<indexterm>
--- 4430,4435 ----
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 6597e18..c56ac6a 100644
*** a/src/backend/utils/misc/guc.c
--- b/src/backend/utils/misc/guc.c
*************** const char *const config_group_names[] =
*** 489,502 ****
gettext_noop("Resource Usage / Memory"),
/* RESOURCES_KERNEL */
gettext_noop("Resource Usage / Kernel Resources"),
/* WAL */
gettext_noop("Write-Ahead Log"),
/* WAL_SETTINGS */
gettext_noop("Write-Ahead Log / Settings"),
/* WAL_CHECKPOINTS */
gettext_noop("Write-Ahead Log / Checkpoints"),
/* WAL_REPLICATION */
! gettext_noop("Write-Ahead Log / Replication"),
/* QUERY_TUNING */
gettext_noop("Query Tuning"),
/* QUERY_TUNING_METHOD */
--- 489,512 ----
gettext_noop("Resource Usage / Memory"),
/* RESOURCES_KERNEL */
gettext_noop("Resource Usage / Kernel Resources"),
+ /* RESOURCES_VACUUM_DELAY */
+ gettext_noop("Resource Usage / Cost-Based Vacuum Delay"),
+ /* RESOURCES_BGWRITER */
+ gettext_noop("Resource Usage / Background Writer"),
+ /* RESOURCES_ASYNCHRONOUS */
+ gettext_noop("Resource Usage / Asynchronous Behavior"),
/* WAL */
gettext_noop("Write-Ahead Log"),
/* WAL_SETTINGS */
gettext_noop("Write-Ahead Log / Settings"),
/* WAL_CHECKPOINTS */
gettext_noop("Write-Ahead Log / Checkpoints"),
+ /* WAL_ARCHIVING */
+ gettext_noop("Write-Ahead Log / Archiving"),
+ /* WAL_STANDBY_SERVERS */
+ gettext_noop("Write-Ahead Log / Standby Servers"),
/* WAL_REPLICATION */
! gettext_noop("Write-Ahead Log / Streaming Replication"),
/* QUERY_TUNING */
gettext_noop("Query Tuning"),
/* QUERY_TUNING_METHOD */
*************** static struct config_bool ConfigureNames
*** 1213,1219 ****
},
{
! {"archive_mode", PGC_POSTMASTER, WAL_SETTINGS,
gettext_noop("Allows archiving of WAL files using archive_command."),
NULL
},
--- 1223,1229 ----
},
{
! {"archive_mode", PGC_POSTMASTER, WAL_ARCHIVING,
gettext_noop("Allows archiving of WAL files using archive_command."),
NULL
},
*************** static struct config_bool ConfigureNames
*** 1222,1228 ****
},
{
! {"hot_standby", PGC_POSTMASTER, WAL_SETTINGS,
gettext_noop("Allows connections and queries during recovery."),
NULL
},
--- 1232,1238 ----
},
{
! {"hot_standby", PGC_POSTMASTER, WAL_STANDBY_SERVERS,
gettext_noop("Allows connections and queries during recovery."),
NULL
},
*************** static struct config_bool ConfigureNames
*** 1271,1277 ****
static struct config_int ConfigureNamesInt[] =
{
{
! {"archive_timeout", PGC_SIGHUP, WAL_SETTINGS,
gettext_noop("Forces a switch to the next xlog file if a "
"new file has not been started within N seconds."),
NULL,
--- 1281,1287 ----
static struct config_int ConfigureNamesInt[] =
{
{
! {"archive_timeout", PGC_SIGHUP, WAL_ARCHIVING,
gettext_noop("Forces a switch to the next xlog file if a "
"new file has not been started within N seconds."),
NULL,
*************** static struct config_int ConfigureNamesI
*** 1384,1390 ****
},
{
! {"max_standby_delay", PGC_SIGHUP, WAL_SETTINGS,
gettext_noop("Sets the maximum delay to avoid conflict processing on hot standby servers."),
NULL,
GUC_UNIT_MS
--- 1394,1400 ----
},
{
! {"max_standby_delay", PGC_SIGHUP, WAL_STANDBY_SERVERS,
gettext_noop("Sets the maximum delay to avoid conflict processing on hot standby servers."),
NULL,
GUC_UNIT_MS
*************** static struct config_int ConfigureNamesI
*** 1477,1483 ****
},
{
! {"vacuum_cost_page_hit", PGC_USERSET, RESOURCES,
gettext_noop("Vacuum cost for a page found in the buffer cache."),
NULL
},
--- 1487,1493 ----
},
{
! {"vacuum_cost_page_hit", PGC_USERSET, RESOURCES_VACUUM_DELAY,
gettext_noop("Vacuum cost for a page found in the buffer cache."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1486,1492 ****
},
{
! {"vacuum_cost_page_miss", PGC_USERSET, RESOURCES,
gettext_noop("Vacuum cost for a page not found in the buffer cache."),
NULL
},
--- 1496,1502 ----
},
{
! {"vacuum_cost_page_miss", PGC_USERSET, RESOURCES_VACUUM_DELAY,
gettext_noop("Vacuum cost for a page not found in the buffer cache."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1495,1501 ****
},
{
! {"vacuum_cost_page_dirty", PGC_USERSET, RESOURCES,
gettext_noop("Vacuum cost for a page dirtied by vacuum."),
NULL
},
--- 1505,1511 ----
},
{
! {"vacuum_cost_page_dirty", PGC_USERSET, RESOURCES_VACUUM_DELAY,
gettext_noop("Vacuum cost for a page dirtied by vacuum."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1504,1510 ****
},
{
! {"vacuum_cost_limit", PGC_USERSET, RESOURCES,
gettext_noop("Vacuum cost amount available before napping."),
NULL
},
--- 1514,1520 ----
},
{
! {"vacuum_cost_limit", PGC_USERSET, RESOURCES_VACUUM_DELAY,
gettext_noop("Vacuum cost amount available before napping."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1513,1519 ****
},
{
! {"vacuum_cost_delay", PGC_USERSET, RESOURCES,
gettext_noop("Vacuum cost delay in milliseconds."),
NULL,
GUC_UNIT_MS
--- 1523,1529 ----
},
{
! {"vacuum_cost_delay", PGC_USERSET, RESOURCES_VACUUM_DELAY,
gettext_noop("Vacuum cost delay in milliseconds."),
NULL,
GUC_UNIT_MS
*************** static struct config_int ConfigureNamesI
*** 1554,1560 ****
* See also CheckRequiredParameterValues() if this parameter changes
*/
{
! {"max_prepared_transactions", PGC_POSTMASTER, RESOURCES,
gettext_noop("Sets the maximum number of simultaneously prepared transactions."),
NULL
},
--- 1564,1570 ----
* See also CheckRequiredParameterValues() if this parameter changes
*/
{
! {"max_prepared_transactions", PGC_POSTMASTER, RESOURCES_MEM,
gettext_noop("Sets the maximum number of simultaneously prepared transactions."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1612,1618 ****
},
{
! {"vacuum_defer_cleanup_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
gettext_noop("Age by which VACUUM and HOT cleanup should be deferred, if any."),
NULL
},
--- 1622,1628 ----
},
{
! {"vacuum_defer_cleanup_age", PGC_USERSET, WAL_STANDBY_SERVERS,
gettext_noop("Age by which VACUUM and HOT cleanup should be deferred, if any."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1790,1796 ****
},
{
! {"bgwriter_delay", PGC_SIGHUP, RESOURCES,
gettext_noop("Background writer sleep time between rounds."),
NULL,
GUC_UNIT_MS
--- 1800,1806 ----
},
{
! {"bgwriter_delay", PGC_SIGHUP, RESOURCES_BGWRITER,
gettext_noop("Background writer sleep time between rounds."),
NULL,
GUC_UNIT_MS
*************** static struct config_int ConfigureNamesI
*** 1800,1806 ****
},
{
! {"bgwriter_lru_maxpages", PGC_SIGHUP, RESOURCES,
gettext_noop("Background writer maximum number of LRU pages to flush per round."),
NULL
},
--- 1810,1816 ----
},
{
! {"bgwriter_lru_maxpages", PGC_SIGHUP, RESOURCES_BGWRITER,
gettext_noop("Background writer maximum number of LRU pages to flush per round."),
NULL
},
*************** static struct config_int ConfigureNamesI
*** 1815,1821 ****
#else
PGC_INTERNAL,
#endif
! RESOURCES,
gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."),
gettext_noop("For RAID arrays, this should be approximately the number of drive spindles in the array.")
},
--- 1825,1831 ----
#else
PGC_INTERNAL,
#endif
! RESOURCES_ASYNCHRONOUS,
gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."),
gettext_noop("For RAID arrays, this should be approximately the number of drive spindles in the array.")
},
*************** static struct config_real ConfigureNames
*** 2143,2149 ****
},
{
! {"bgwriter_lru_multiplier", PGC_SIGHUP, RESOURCES,
gettext_noop("Multiple of the average buffer usage to free per round."),
NULL
},
--- 2153,2159 ----
},
{
! {"bgwriter_lru_multiplier", PGC_SIGHUP, RESOURCES_BGWRITER,
gettext_noop("Multiple of the average buffer usage to free per round."),
NULL
},
*************** static struct config_real ConfigureNames
*** 2197,2203 ****
static struct config_string ConfigureNamesString[] =
{
{
! {"archive_command", PGC_SIGHUP, WAL_SETTINGS,
gettext_noop("Sets the shell command that will be called to archive a WAL file."),
NULL
},
--- 2207,2213 ----
static struct config_string ConfigureNamesString[] =
{
{
! {"archive_command", PGC_SIGHUP, WAL_ARCHIVING,
gettext_noop("Sets the shell command that will be called to archive a WAL file."),
NULL
},
*************** static struct config_string ConfigureNam
*** 2630,2636 ****
#endif /* USE_SSL */
{
! {"application_name", PGC_USERSET, LOGGING,
gettext_noop("Sets the application name to be reported in statistics and logs."),
NULL,
GUC_IS_NAME | GUC_REPORT | GUC_NOT_IN_SAMPLE
--- 2640,2646 ----
#endif /* USE_SSL */
{
! {"application_name", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Sets the application name to be reported in statistics and logs."),
NULL,
GUC_IS_NAME | GUC_REPORT | GUC_NOT_IN_SAMPLE
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 94a4e69..5ea568a 100644
*** a/src/backend/utils/misc/postgresql.conf.sample
--- b/src/backend/utils/misc/postgresql.conf.sample
***************
*** 183,201 ****
#archive_timeout = 0 # force a logfile segment switch after this
# number of seconds; 0 disables
! # - Hot Standby -
#hot_standby = off # allows queries during recovery
#max_standby_delay = 30s # max acceptable lag to allow queries to
# complete without conflict; -1 means forever
#vacuum_defer_cleanup_age = 0 # num transactions by which cleanup is deferred
- # - Replication -
-
- #max_wal_senders = 0 # max number of walsender processes
- #wal_sender_delay = 200ms # 1-10000 milliseconds
- #wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables
-
#------------------------------------------------------------------------------
# QUERY TUNING
--- 183,201 ----
#archive_timeout = 0 # force a logfile segment switch after this
# number of seconds; 0 disables
! # - Streaming Replication -
!
! #max_wal_senders = 0 # max number of walsender processes
! #wal_sender_delay = 200ms # 1-10000 milliseconds
! #wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables
!
! # - Standby Servers -
#hot_standby = off # allows queries during recovery
#max_standby_delay = 30s # max acceptable lag to allow queries to
# complete without conflict; -1 means forever
#vacuum_defer_cleanup_age = 0 # num transactions by which cleanup is deferred
#------------------------------------------------------------------------------
# QUERY TUNING
diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h
index 4989fac..083f003 100644
*** a/src/include/utils/guc_tables.h
--- b/src/include/utils/guc_tables.h
*************** enum config_group
*** 50,58 ****
--- 50,63 ----
RESOURCES,
RESOURCES_MEM,
RESOURCES_KERNEL,
+ RESOURCES_VACUUM_DELAY,
+ RESOURCES_BGWRITER,
+ RESOURCES_ASYNCHRONOUS,
WAL,
WAL_SETTINGS,
WAL_CHECKPOINTS,
+ WAL_ARCHIVING,
+ WAL_STANDBY_SERVERS,
WAL_REPLICATION,
QUERY_TUNING,
QUERY_TUNING_METHOD,
On 15/06/10 08:09, Takahiro Itagaki wrote:
Fujii Masao<masao.fujii@gmail.com> wrote:
On Fri, Jun 11, 2010 at 7:25 PM, Heikki Linnakangas
What's the policy with that, should all the sections in the sample config
file and docs have a corresponding enum in config_group_names?+1. This seems sensible.
Here is a patch to do that. I used terms in the documentation for category
names. Also, some uncategorized variables moved into detailed groups.
Thanks, looks good to me.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com